国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術(shù)及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - Yii2中OAuth擴展及QQ互聯(lián)登錄實現(xiàn)方法

Yii2中OAuth擴展及QQ互聯(lián)登錄實現(xiàn)方法

2021-01-19 16:34懶人 PHP教程

這篇文章主要介紹了Yii2中OAuth擴展及QQ互聯(lián)登錄的方法,實例分析了OAuth擴展的相關(guān)配置與QQ互聯(lián)登陸的實現(xiàn)技巧,需要的朋友可以參考下

本文實例講述了Yii2中OAuth擴展及QQ互聯(lián)登錄實現(xiàn)方法。分享給大家供大家參考,具體如下:

復制代碼 代碼如下:
php composer.phar require --prefer-dist yiisoft/yii2-authclient "*"

 

Quick start 快速開始

更改Yii2的配置文件config/main.php,在components中增加如下內(nèi)容

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
'components' => [
 'authClientCollection' => [
 'class' => 'yii\authclient\Collection',
 'clients' => [
  'google' => [
  'class' => 'yii\authclient\clients\GoogleOpenId'
  ],
  'facebook' => [
  'class' => 'yii\authclient\clients\Facebook',
  'clientId' => 'facebook_client_id',
  'clientSecret' => 'facebook_client_secret',
  ],
 ],
 ]
 ...
]

更改入口文件,一般是app/controllers/SiteController.php,在function actions增加代碼,同時增加回調(diào)函數(shù)successCallback,大致如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class SiteController extends Controller
{
 public function actions()
 {
 return [
  'auth' => [
  'class' => 'yii\authclient\AuthAction',
  'successCallback' => [$this, 'successCallback'],
  ],
 ]
 }
 public function successCallback($client)
 {
 $attributes = $client->getUserAttributes();
 // user login or signup comes here
 }
}

在登錄的Views中,增加如下代碼

?
1
2
3
<?= yii\authclient\widgets\AuthChoice::widget([
 'baseAuthUrl' => ['site/auth']
])?>

以上是官方的說明文檔,下面我們來接入QQ互聯(lián)

增加QQ登錄的組件 我這里是放在 common/components/QqOAuth.php 中,源代碼如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<?php
namespace common\components;
use yii\authclient\OAuth2;
use yii\base\Exception;
use yii\helpers\Json;
/**
 *
 * ~~~
 * 'components' => [
 * 'authClientCollection' => [
 *  'class' => 'yii\authclient\Collection',
 *  'clients' => [
 *  'qq' => [
 *   'class' => 'common\components\QqOAuth',
 *   'clientId' => 'qq_client_id',
 *   'clientSecret' => 'qq_client_secret',
 *  ],
 *  ],
 * ]
 * ...
 * ]
 * ~~~
 *
 * @see http://connect.qq.com/
 *
 * @author easypao <admin@easypao.com>
 * @since 2.0
 */
class QqOAuth extends OAuth2
{
 public $authUrl = 'https://graph.qq.com/oauth2.0/authorize';
 public $tokenUrl = 'https://graph.qq.com/oauth2.0/token';
 public $apiBaseUrl = 'https://graph.qq.com';
 public function init()
 {
 parent::init();
 if ($this->scope === null) {
  $this->scope = implode(',', [
  'get_user_info',
  ]);
 }
 }
 protected function initUserAttributes()
 {
 $openid = $this->api('oauth2.0/me', 'GET');
 $qquser = $this->api("user/get_user_info", 'GET', ['oauth_consumer_key'=>$openid['client_id'], 'openid'=>$openid['openid']]);
 $qquser['openid']=$openid['openid'];
 return $qquser;
 }
 protected function defaultName()
 {
 return 'qq';
 }
 protected function defaultTitle()
 {
 return 'Qq';
 }
 /**
 * 該擴展初始的處理方法似乎QQ互聯(lián)不能用,應此改寫了方法
 * @see \yii\authclient\BaseOAuth::processResponse()
 */
 protected function processResponse($rawResponse, $contentType = self::CONTENT_TYPE_AUTO)
 {
   if (empty($rawResponse)) {
     return [];
   }
   switch ($contentType) {
     case self::CONTENT_TYPE_AUTO: {
       $contentType = $this->determineContentTypeByRaw($rawResponse);
       if ($contentType == self::CONTENT_TYPE_AUTO) {
   //以下代碼是特別針對QQ互聯(lián)登錄的,也是與原方法不一樣的地方
         if(strpos($rawResponse, "callback") !== false){
           $lpos = strpos($rawResponse, "(");
           $rpos = strrpos($rawResponse, ")");
           $rawResponse = substr($rawResponse, $lpos + 1, $rpos - $lpos -1);
           $response = $this->processResponse($rawResponse, self::CONTENT_TYPE_JSON);
           break;
         }
   //代碼添加結(jié)束
         throw new Exception('Unable to determine response content type automatically.');
       }
       $response = $this->processResponse($rawResponse, $contentType);
       break;
     }
     case self::CONTENT_TYPE_JSON: {
       $response = Json::decode($rawResponse, true);
       if (isset($response['error'])) {
         throw new Exception('Response error: ' . $response['error']);
       }
       break;
     }
     case self::CONTENT_TYPE_URLENCODED: {
       $response = [];
       parse_str($rawResponse, $response);
       break;
     }
     case self::CONTENT_TYPE_XML: {
       $response = $this->convertXmlToArray($rawResponse);
       break;
     }
     default: {
       throw new Exception('Unknown response type "' . $contentType . '".');
     }
   }
   return $response;
 }
}

更改 config/main.php 文件,在components中增加,大致如下

?
1
2
3
4
5
6
7
8
9
10
11
12
'components' => [
 'authClientCollection' => [
   'class' => 'yii\authclient\Collection',
   'clients' => [
     'qq' => [
      'class'=>'common\components\QqOAuth',
      'clientId'=>'your_qq_clientid',
      'clientSecret'=>'your_qq_secret'
    ],
   ],
 ]
]

SiteController.php 就按官方那樣子

?
1
2
3
4
5
6
public function successCallback($client)
{
 $attributes = $client->getUserAttributes();
 // 用戶的信息在$attributes中,以下是您根據(jù)您的實際情況增加的代碼
 // 如果您同時有QQ互聯(lián)登錄,新浪微博等,可以通過 $client->id 來區(qū)別。
}

最后在登錄的視圖文件中 增加QQ登錄鏈接

?
1
<a href="/site/auth?authclient=qq">使用QQ快速登錄</a>

希望本文所述對大家基于Yii框架的PHP程序設(shè)計有所幫助。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 亚洲午夜在线 | 亚洲一区二区三区免费视频 | 人人干在线| 97国产精品 | 国产丝袜在线 | 转生成为史莱姆这档事第四季在线观看 | 日本a视频在线观看 | 一级全黄性色生活片 | 国产成人在线一区二区 | 精品日韩一区二区 | 精品一区二区三区四区五区 | 成人午夜在线 | 精精国产xxxx视频在线播放7 | 色综合中文 | 日本一区二区高清视频 | 中文字幕99 | 成人在线免费电影 | 亚洲精品无| 国产精品成人一区二区三区夜夜夜 | 日韩影片在线观看 | 国产精品永久免费自在线观看 | 久日av| 欧美精品一区二 | 国产精品一二三区 | 伊人久久艹 | 久久福利 | 久久精品亚洲精品国产欧美kt∨ | 日韩欧美一区二区在线观看视频 | 天堂一区二区三区在线 | av影片在线 | 欧美午夜精品久久久久久浪潮 | 日韩视频一区 | 国产精品一区二区久久 | 国产成人av一区二区三区 | 成人激情在线 | 天天拍拍天天干 | 亚洲午夜成激人情在线影院 | 欧美日韩中文字幕在线 | 日本久久精品 | av网站在线看 | 青青草一区二区 |