thinkPHP5项目中实现QQ第三方登录功能
2020-02-19 16:00:29来源:爱站网 阅读 ()
不管开发什么项目,我们都要不断测试后,才能正常上线,这是开发中重要环节之一,为了让大家能在开发项目的时候节省时间,爱站技术频道小编为大家带来了thinkPHP5项目中实现QQ第三方登录功能,一起来学习吧!
1. 找到官方SDK里面的核心文件
框架外使用的时候是include 'qqConnectAPI.php'
,打开这个文件可以看到它是包含了另外几个文件的,comm文件夹下的几个文件无非就是定义一些常量,记录一下你的APP KEY这些信息,都无关紧要,只要把class文件夹下的几个类文件放到tp5里面就好了,而且仔细看一下代码会发现其实只要拿到三个类就完全可以实现功能了。
2. 放到tp框架里
tp5推荐将第三方的东西,同时又不是composer安装的统一放到extend目录下,因为可能以后还要做其他扩展,这里将qq登录相关的单独建一个qqlogin文件夹,
可以看到里面只有三个类,我去掉了一个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。
然后再修改QC.php,只需修改构造方法,把数组的三个变量给一下值就好了。
$this->keysArr = array( "oauth_consumer_key" => (int)$this->appid, "access_token" => session('access_token'), "openid" => session('openid') );
4. 控制器调用
改造完成,可以在控制器里面使用了,附上代码入下:
use extend\qqlogin\QC; // 处理qq登录 public function qqlogin() { $qq = new QC(); $url = $qq->qq_login(); $this->redirect($url); } // qq登录回调函数 public function qqcallback(UserModel $user) { $qq = new QC(); $qq->qq_callback(); $qq->get_openid(); $qq = new QC(); $datas = $qq->get_user_info(); * // 拿到用户信息后的处理 * }
以上就是爱站技术频道小编为大家整理的thinkPHP5项目中实现QQ第三方登录功能,大家看完之后,是不是也希望大家可以有机会去学习更多呢?
原文链接:https://js.aizhan.com/develop/php/11630.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:PHP二维关联数组的遍历方式
- PHP写UltraEdit插件脚本实现方法 2020-03-29
- PHP实现的MD5结合RSA签名算法实例 2020-03-22
- 利用PHP实现开心消消乐的算法示例 2020-03-22
- PHP基于自定义函数实现的汉字转拼音功能实例 2020-03-17
- PHP实现的基于单向链表解决约瑟夫环问题示例 2020-03-17
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash