最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2016年05月16日 12:33:38   作者:懶人  
這篇文章主要介紹了Yii2中OAuth擴展及QQ互聯(lián)登錄的方法,實例分析了OAuth擴展的相關(guān)配置與QQ互聯(lián)登陸的實現(xiàn)技巧,需要的朋友可以參考下

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

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

Quick start 快速開始

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

'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,大致如下

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互聯(lián)

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

<?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)不能用,應(yīng)此改寫了方法
 * @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中增加,大致如下

'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中,以下是您根據(jù)您的實際情況增加的代碼
 // 如果您同時有QQ互聯(lián)登錄,新浪微博等,可以通過 $client->id 來區(qū)別。
}

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

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

PS:小編在這里推薦一款本站的php格式化美化的排版工具幫助大家在以后的PHP程序設(shè)計中進行代碼排版:
 
php代碼在線格式化美化工具:http://tools.jb51.net/code/phpformat

更多關(guān)于Yii相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Yii框架入門及常用技巧總結(jié)》、《php優(yōu)秀開發(fā)框架總結(jié)》、《smarty模板入門基礎(chǔ)教程》、《php日期與時間用法總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總

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

相關(guān)文章

  • Laravel如何友好的修改.env配置文件詳解

    Laravel如何友好的修改.env配置文件詳解

    使用laravel框架開發(fā)PHP程序,配置框架的.env文件是至關(guān)重要的,這個文件上需要配置數(shù)據(jù)庫、數(shù)據(jù)庫用戶以及緩存等。下面這篇文章主要給大家介紹了Laravel如何友好的修改.env配置文件的相關(guān)資料,需要的朋友可以參考下。
    2017-06-06
  • TP5 基于bootstrap實現(xiàn)多圖上傳插件

    TP5 基于bootstrap實現(xiàn)多圖上傳插件

    這篇文章主要介紹了TP5 基于bootstrap實現(xiàn)多圖上傳插件,需要的朋友可以參考下
    2018-07-07
  • Yii Framework框架中事件和行為的區(qū)別及應(yīng)用實例分析

    Yii Framework框架中事件和行為的區(qū)別及應(yīng)用實例分析

    這篇文章主要介紹了Yii Framework框架中事件和行為的區(qū)別及應(yīng)用,結(jié)合實例形式分析了Yii Framework框架中事件和行為的相關(guān)概念、原理、區(qū)別及應(yīng)用操作技巧,需要的朋友可以參考下
    2020-04-04
  • 詳解php中serialize()和unserialize()函數(shù)

    詳解php中serialize()和unserialize()函數(shù)

    這篇文章主要介紹了php的serialize()函數(shù)和unserialize()函數(shù)的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • thinkPHP5.0框架引入Traits功能實例分析

    thinkPHP5.0框架引入Traits功能實例分析

    這篇文章主要介紹了thinkPHP5.0框架引入Traits功能,結(jié)合實例形式分析了Traits的概念、功能及thinkPHP5.0中Traits功能的使用方法,需要的朋友可以參考下
    2017-03-03
  • Laravel中10個有用的用法小結(jié)

    Laravel中10個有用的用法小結(jié)

    這篇文章主要給大家總結(jié)介紹了關(guān)于Laravel中10個有用的用法,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Laravel具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 如何修改yii2.0自帶的user表為其它的表

    如何修改yii2.0自帶的user表為其它的表

    因為某種原因,不想用yii自帶的user表,想用自己建的admin數(shù)據(jù)庫表,怎么修改呢?下面小編給大家介紹下修改yii2.0自帶的user表為其它的表的方法,一起看看吧
    2017-08-08
  • Laravel框架學(xué)習(xí)筆記(一)環(huán)境搭建

    Laravel框架學(xué)習(xí)筆記(一)環(huán)境搭建

    本文主要是把自己學(xué)習(xí)Laravel框架中的經(jīng)驗寫下來。這是本系列的第一篇,工欲善其事必先利其器,先把環(huán)境搭建好吧,之前也沒寫過什么文章,可能文章結(jié)構(gòu)比較混亂,想到那寫到哪。
    2014-10-10
  • php讀取excel文件的簡單實例

    php讀取excel文件的簡單實例

    這篇文章介紹了php讀取excel文件的簡單實例,有需要的朋友可以參考一下
    2013-08-08
  • PHP無限分類(樹形類)

    PHP無限分類(樹形類)

    PHP無限分類,Google一下就能找到很多相關(guān)資料,思路比較拉風(fēng)的,也是用得比較多的就是分類表至少有id,pid,name三個字段,id自增表分類,pid為父分類,name為分類名,這樣就構(gòu)成了一棵樹,如下,算是我查詢分類表得到的結(jié)果集
    2013-09-09

最新評論

龙口市| 乐陵市| 淮北市| 兴和县| 黎平县| 南涧| 敖汉旗| 翁牛特旗| 宁都县| 封开县| 闽清县| 云和县| 仙游县| SHOW| 富源县| 潍坊市| 托克托县| 错那县| 远安县| 印江| 阳东县| 广丰县| 苗栗市| 泰和县| 阿鲁科尔沁旗| 沙雅县| 如东县| 楚雄市| 崇义县| 贡嘎县| 准格尔旗| 白银市| 黑山县| 缙云县| 望江县| 通许县| 临颍县| 洱源县| 房山区| 福建省| 五华县|