亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

Yii2中OAuth擴展及QQ互聯登錄實現方法

2024-05-04 23:46:05
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了Yii2中OAuth擴展及QQ互聯登錄的方法,實例分析了OAuth擴展的相關配置與QQ互聯登陸的實現技巧,需要的朋友可以參考下
 

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

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

 

Quick start 快速開始

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

'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增加代碼,同時增加回調函數successCallback,大致如下

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中,增加如下代碼

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

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

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

<?phpnamespace 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互聯不能用,應此改寫了方法 * @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互聯登錄的,也是與原方法不一樣的地方          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;         }   //代碼添加結束         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中增加,大致如下

'components' => [ 'authClientCollection' => [   'class' => 'yii/authclient/Collection',   'clients' => [     'qq' => [      'class'=>'common/components/QqOAuth',      'clientId'=>'your_qq_clientid',      'clientSecret'=>'your_qq_secret'    ],   ], ]]

SiteController.php 就按官方那樣子

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

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

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


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
69av在线播放| 日韩国产欧美区| 26uuu久久噜噜噜噜| 成人激情视频在线| 中文字幕一区日韩电影| 国产精品高潮在线| 欧美国产亚洲精品久久久8v| 最近免费中文字幕视频2019| 91精品久久久久久久久久入口| 欧美又大又粗又长| 午夜精品一区二区三区在线播放| 色爱av美腿丝袜综合粉嫩av| 精品亚洲国产视频| 久久久免费观看视频| 亚洲欧美日韩在线一区| 久久频这里精品99香蕉| 日韩在线免费av| 日韩精品一区二区三区第95| 92版电视剧仙鹤神针在线观看| 国模gogo一区二区大胆私拍| 精品无人区太爽高潮在线播放| 亚洲欧美中文日韩v在线观看| 亚洲奶大毛多的老太婆| 久久九九热免费视频| 久久久精品一区| 91超碰caoporn97人人| 日韩欧美精品免费在线| 日本中文字幕久久看| 亚洲欧美国内爽妇网| 国产99视频在线观看| 国产乱肥老妇国产一区二| 综合av色偷偷网| 日韩精品在线视频| 久热精品视频在线免费观看| 久久综合电影一区| 国产999精品久久久影片官网| 欧美性xxxxx| 国产大片精品免费永久看nba| 国产精品专区第二| 精品电影在线观看| 日韩中文在线中文网三级| 91精品国产色综合久久不卡98| 自拍偷拍亚洲区| 日韩美女视频在线观看| 欧美一区三区三区高中清蜜桃| 欧美成人高清视频| 日韩中文字幕视频在线观看| 亚洲欧美国产视频| 欧美日韩另类视频| 精品久久久久久亚洲精品| 国产精品三级久久久久久电影| 日韩精品视频中文在线观看| 国产精品直播网红| 久久久久久久爱| 日韩在线视频一区| 亚洲精品一区中文字幕乱码| 欧美视频中文在线看| 欧美xxxx综合视频| 久久在线视频在线| 91伊人影院在线播放| 亚洲欧洲午夜一线一品| 欧美精品videos| 91精品久久久久久久久久入口| 国产脚交av在线一区二区| 亚洲毛片在线看| 久久视频国产精品免费视频在线| 97精品在线视频| 欧美日韩日本国产| 亚洲电影中文字幕| 亚洲久久久久久久久久久| 国产精品久久久久久搜索| 欧美中文字幕在线| 97色伦亚洲国产| 日韩精品视频免费| 日韩亚洲成人av在线| 欧美一区二区三区免费观看| 夜色77av精品影院| 国产精品一区二区性色av| 国产97免费视| 久久久黄色av| 日韩精品中文字幕有码专区| 国产精品视频白浆免费视频| 亚洲第一页在线| 国产精品一区=区| 国产精品精品一区二区三区午夜版| 亚洲加勒比久久88色综合| 久久久久久免费精品| 中文.日本.精品| 国产日韩中文在线| 欧美国产极速在线| 亚洲欧美另类国产| 日本亚洲精品在线观看| 久久亚洲欧美日韩精品专区| 久久久亚洲影院你懂的| 亚洲国产精品999| 欧美一区二区三区……| 欧美激情国内偷拍| 亚洲精品视频中文字幕| 久久五月天综合| 亚洲国产成人久久综合一区| 中文字幕欧美专区| 亚洲第一精品夜夜躁人人躁| 日韩欧美在线中文字幕| 午夜剧场成人观在线视频免费观看| 亚洲国产精品嫩草影院久久| 欧美在线欧美在线| 91精品国产777在线观看| 久久人91精品久久久久久不卡| 亚洲国产中文字幕在线观看| 日韩福利伦理影院免费| 精品夜色国产国偷在线| 欧美激情xxxx| 亚洲男人7777| 国产精品91免费在线| 国产精品久久久久免费a∨大胸| 日韩av电影国产| 欧美日韩国产一区二区| 538国产精品一区二区免费视频| 欧美电影在线观看高清| 全色精品综合影院| 粗暴蹂躏中文一区二区三区| 91精品国产91久久| 亚洲美女av在线播放| 亚洲欧美一区二区三区在线| 91在线精品播放| 欧美巨乳在线观看| 国产成人一区二区三区电影| 欧美成人精品xxx| 成人激情视频免费在线| 欧美激情乱人伦一区| 亚洲bt欧美bt日本bt| 亚洲精品一区中文字幕乱码| 中文字幕欧美日韩精品| 亚洲成年人在线| 国产视频观看一区| 久久久999国产精品| 久久久久久久久电影| 国产精品久久久久av| 国产精品一区二区性色av| 日韩电影免费观看在线观看| 成人精品久久一区二区三区| 最近中文字幕mv在线一区二区三区四区| 97福利一区二区| 国产suv精品一区二区三区88区| 97av在线视频| 亚洲精品网址在线观看| 色妞色视频一区二区三区四区| 日本一区二区三区在线播放| 日韩av网址在线观看| 欧美一级片免费在线| 97精品在线视频| 中文字幕欧美视频在线| 欧美在线精品免播放器视频| 91丨九色丨国产在线| 国产精品专区h在线观看| 国产精品精品一区二区三区午夜版| 亚洲人线精品午夜| 亚洲精品福利资源站| 亚洲精品一区二区久| 91在线观看免费高清完整版在线观看| 欧美在线亚洲一区| 久久大大胆人体| 97av在线影院| 日韩视频中文字幕|