久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

thinkPHP5項目中實現QQ第三方登錄功能

這篇文章主要介紹了thinkPHP5項目中實現QQ第三方登錄功能,結合實例形式較為詳細的分析了修改QQ登陸接口并整合進thinkPHP5項目中的具體步驟與相關操作技巧,需要的朋友可以參考下

本文實例講述了thinkPHP5項目中實現QQ第三方登錄功能。分享給大家供大家參考,具體如下:

最近用thinkPHP 5框架做了一個婚紗店的項目,在開發過程中需要用到第三方登錄,騰訊官方給的案例是幾個文件相互包含實現的,放到tp5里面很悲催的發現在控制器中不能通過include或者require完成預期功能,想要用騰訊官方封的類就必須對其進行修改,修改如下:

1. 找到官方SDK里面的核心文件

thinkPHP5項目中實現QQ第三方登錄功能

框架外使用的時候是include 'qqConnectAPI.php',打開這個文件可以看到它是包含了另外幾個文件的,comm文件夾下的幾個文件無非就是定義一些常量,記錄一下你的APP KEY這些信息,都無關緊要,只要把class文件夾下的幾個類文件放到tp5里面就好了,而且仔細看一下代碼會發現其實只要拿到三個類就完全可以實現功能了。

2. 放到tp框架里

tp5推薦將第三方的東西,同時又不是composer安裝的統一放到extend目錄下,因為可能以后還要做其他擴展,這里將qq登錄相關的單獨建一個qqlogin文件夾,

thinkPHP5項目中實現QQ第三方登錄功能

可以看到里面只有三個類,我去掉了一個Recorder和一個ErrorCase類,見名知意,這兩個的作用是記錄一些信息,如access_token,還有異常處理,這里我就直接刪掉了。另外注意,按照psr4規范,類名要跟文件名一致,所以要把文件名改一下,同時加上命名空間extend\qqlogin,tp5所有的類都要有命名空間。

另外為了防止tp5找不到我們需要的文件,最好在config.php文件里注冊一條根命名空間,在第30行:

// 注冊的根命名空間
'root_namespace'  => [
 'extend\qqlogin' => '../extend/qqlogin/',
 'extend\baidu' => '../extend/bdlogin/'
],

3. 改造源代碼

因為QC.php是繼承了Oauth.php,我們從后者改起,去掉require_once,加上命名空間這個就不說了,首先看成員屬性,類常量是騰訊平臺的地址,不用管,原來有三個屬性,recorder、error不需要,注釋掉或直接刪掉。下文同樣,要想象跟這兩個單詞有仇,看到就注釋或刪掉。

// protected $recorder;
public $urlUtils;
// protected $error;
public $state;
public $appid = "****";
public $callback = "http://****/index/user/qqcallback";
public $scope = "get_user_info";

下面四個屬性是需要添加的,state用于防止CSRF攻擊,下面三個看官方文檔就知道是什么東西了,這些原來是在comm文件夾下的inc.php存放的,現在直接拿過來變成成員屬性。

然后構造函數,實例化三個類,有兩個已經不存在了,而且上面說了,跟這兩個單詞有仇,看到就要注釋或刪掉。

再看下面的第一個成員方法qq_login()

public function qq_login(){
 $appid = $this->recorder->readInc("appid");
 $callback = $this->recorder->readInc("callback");
 $scope = $this->recorder->readInc("scope");
 //---生成唯一隨機串防CSRF攻擊
 $state = md5(uniqid(rand(), TRUE));
 $this->recorder->write('state',$state);
 *
 *
 return $login_url;
 // header("Location:$login_url");
}

我們已經有仇把有那兩個單詞的這幾行刪掉了,我們又需要這些東西,不要忘了我們上面增加了三個成員屬性,這些值我們已經有了下面用的時候通過$this->appid就好了。state驗證的時候我們可以通過session去驗證,在tp5里面提供了助手函數去寫session:

session('state',$this->state);

最后一句是header跳轉,暫不知道什么原因在tp5里面并不能看到跳轉效果,于是直接將url返回,再在控制器里面通過tp5的重定向函數$this->redirect()實現跳轉。

下面看qq_callback()

public function qq_callback(){
 // $state = $this->recorder->read("state");
 //---驗證state防止CSRF攻擊
 if(input('state') != session('state')){
  // $this->error("30001");
  exit('30001');
 }
 *
 *
 // return $params["access_token"];
 session('access_token',$params["access_token"]);
}

出現那兩個單詞的已經注釋了,我們在qq_login里面有寫session,這里直接取sessio比較就行了,input()也是tp5的助手函數,可以獲得get、post請求的參數,結果是一個數組,但是不能夠再動態為其添加鍵值對,想要添加的話必須將其賦給一個變量,再對變量進行操作。這里有錯誤的話直接exit打印出錯誤號,官方文檔有詳細的錯誤號說明。在最后也是直接將獲取到的access_token寫進session。

下面的get_openid()方法類似,參數列表用session構建,返回值直接寫進session。

【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

本文主要給大家講述了PHP實現QQ登錄的開原理以及相關的代碼實現過程,對此有興趣和需要的朋友參考下吧。
這篇文章主要介紹了tp5(thinkPHP5)操作mongoDB數據庫的方法,結合實例形式簡單分析了mongoDB數據庫及thinkPHP5連接、查詢MongoDB數據庫的基本操作技巧,需要的朋友可以參考下
thinkphp官網在去年的時候發布了tp的顛覆版本thinkphp5,tp5確實比之前的版本好用了很多,那么下面這篇文章就來給大家介紹關于在云虛擬主機部署thinkphp5項目的相關資料,需要的朋友可以
這篇文章主要介紹了Thinkphp5行為使用方法匯總,需要的朋友可以參考下
這篇文章主要介紹了thinkphp5 加載靜態資源路徑與常量的方法的相關資料,需要的朋友可以參考下
這篇文章主要介紹了thinkphp5 URL和路由的功能詳解與實例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
主站蜘蛛池模板: 岛国视频 | 国产高清视频一区 | 日韩精品久久 | 国产成人精品久久二区二区91 | 久久777| 网站黄色av | 亚洲激情视频在线 | 亚洲日韩中文字幕一区 | 97人人澡人人爽91综合色 | 日韩一区不卡 | 风间由美一区二区三区在线观看 | 国产毛片在线看 | 亚洲欧美aⅴ | 伊人网站| 久久久久久蜜桃一区二区 | 一区二区三区视频免费观看 | 久久久久久免费毛片精品 | 免费能直接在线观看黄的视频 | 久久久久久国产一区二区三区 | 日日操日日干 | 国产精品自产拍在线观看蜜 | 黄网站在线播放 | 九九99久久 | 亚洲一区二区精品视频 | 国产精品美女久久久久aⅴ国产馆 | 亚洲视频免费在线看 | 91久久综合亚洲鲁鲁五月天 | 亚洲国产精品一区 | 午夜一区二区三区视频 | 国产欧美日韩精品一区 | 在线播放精品视频 | 日韩在线看片 | 成人精品视频在线观看 | 久久一久久 | 亚洲国产精品人人爽夜夜爽 | 一区二区三区在线免费观看视频 | 亚洲精品二区 | 久久国产精品久久久久久久久久 | 国产精品www | 国产91精品久久久久久久网曝门 | 精品国产亚洲一区二区三区大结局 |