怎么在thinkPHP5项目中实现一个第三方登录功能

  介绍

这期内容当中小编将会给大家带来有关怎么在thinkPHP5项目中实现一个第三方登录功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

<强> 1。找到官方SDK里面的核心文件

怎么在thinkPHP5项目中实现一个第三方登录功能

框架外使用的时候是<代码>包括& # 39;qqConnectAPI.php& # 39;>

<强> 2。放到tp框架里

tp5推荐将第三方的东西,同时又不是作曲家安装的统一放到扩展目录下,因为可能以后还要做其他扩展,这里将qq登录相关的单独建一个qqlogin文件夹,

怎么在thinkPHP5项目中实现一个第三方登录功能

可以看到里面只有三个类,我去掉了一个录音机和一个ErrorCase类,见名知意,这两个的作用是记录一些信息,如access_token,还有异常处理,这里我就直接删掉了。另外注意,按照psr4规范,类名要跟文件名一致,所以要把文件名改一下,同时加上命名空间扩展\ qqlogin tp5所有的类都要有命名空间。

另外为了防止tp5找不到我们需要的文件,最好在配置。php文件里注册一条根命名空间,在第30行:

//,注册的根命名空间   & # 39;root_namespace& # 39;,,=祝辞,(   ,& # 39;扩展\ qqlogin& # 39;,=祝辞,& # 39;. ./扩展/qqlogin & # 39;,   ,& # 39;扩展\百度# 39;,=祝辞,& # 39;. ./扩展/bdlogin & # 39;   ],

<强> 3。改造源代码

因为QC.php是继承了Oauth。php,我们从后者改起,去掉require_once,加上命名空间这个就不说了,首先看成员属性,类常量是腾讯平台的地址,不用管,原来有三个属性,录音机,错误不需要,注释掉或直接删掉。下文同样,要想象跟这两个单词有仇,看到就注释或删掉。

//, protected 记录仪;美元   public  urlUtils美元;//,protected  $错误;   public  $状态;   public  appid 美元;=,“* * * *“;   时间=public  callback 美元;“http://* * * *//user/qqcallback"指数;;   public  scope 美元;=,“get_user_info"

下面四个属性是需要添加的,国家用于防止CSRF攻击、下面三个看官方文档就知道是什么东西了,这些原来是在通讯文件夹下的inc.php存放的,现在直接拿过来变成成员属性。

然后构造函数,实例化三个类,有两个已经不存在的了,而且上面说了,跟这两个单词有仇,看到就要注释或删掉。

再看下面的第一个成员方法<代码> qq_login()

public  function  qq_login () {   美元,美元appid =,这→记录器→readInc (“appid");   美元,美元callback =,这→记录器→readInc (“callback");   美元,美元scope =,这→记录器→readInc (“scope");   ,//- - - - - -生成唯一随机串防CSRF攻击   ,state 美元;=,md5(函数(rand(),,真的));   ,$ this→记录器→写(& # 39;国家# 39;美元状态);   ,*   ,*   ,return  login_url美元;   ,//标题(“位置:login_url"美元;);   }

我们已经有仇把有那两个单词的这几行删掉了,我们又需要这些东西,不要忘了我们上面增加了三个成员属性,这些值我们已经有了下面用的时候通过<代码> $ this→appid> 会话(& # 39;国家# 39;,这美元→状态),

最后一句是头跳转,暂不知道什么原因在tp5里面并不能看到跳转效果,于是直接将url返回,再在控制器里面通过tp5的重定向函数<代码> $ this→重定向()实现跳转。

下面看qq_callback ()

public  function  qq_callback () {   ,//state 美元;=,$ this→记录器→读(“state");   ,//- - -验证国家防止CSRF攻击   ,如果(输入(& # 39;国家# 39;),!=,会话(& # 39;国家# 39;)){//才能,$ this→错误(“30001”);   退出才能(& # 39;30001 & # 39;);   ,}   ,*   ,*   ,//return  $ params [“access_token"];   ,会话(& # 39;access_token& # 39;美元params [“access_token"]);   }

怎么在thinkPHP5项目中实现一个第三方登录功能