在我们的项目开发中,第三方登录可以为用户提供微信、QQ、微博登录等便利。
作为一个优雅的PHP框架,Laravel集成了许多第三方登录插件。
本文详细阐述了在Laravel框架中实现QQ登录的方法。
1 .在准备开发之前,首先需要在QQ互联平台上创建一个APP发布。
1、登录QQ互联网中心(URL:https://connect.QQ.com/manage.html #/)注册,完成开发者实名认证。
2、单击下面的“创建APP”按钮,然后从弹出框中选择创建站点APP
3、填写应用基本资料
其中,站点名称必须是站点ICP备份编号的名称。 否则,审查不合格。
4、完善资料,点击制作APP即可。
在此注意:
可以填写多个网站召回地点。 这个请记住。 开发过程使用这个地址。 例如,http://www.domain.com/oauth/qq提供者,即域名备案的主体,个人是姓名。 5、等待审查通过。
5、APP审核通过后,点击APP上的查看按钮,可以查看APP的APP ID和APP Key。
6 .选择APP应用程序接口目标、unionid接口和访问。
这样,前期准备就完成了。 开发过程中,到目前为止需要三个参数。
实现APP IDAPP Key回叫地址2.QQ登录,获取用户基本信息1,创建Laravel项目。
怎么制作? 请单击此处
2、添加依存插件/服务:
可以打开Terminal,然后使用以下composer命令将其添加
composerrequiresocialiteproviders/QQ图:
3、添加服务提供商服务提供商
打开文件config/app.php,找到添加的提供程序词典,如下所示:
' providers '=[/laravelsocialitesocialiteserviceprovider :3360 classo///如果有此行,请注释socialiteproviders
同样,在config/app.php中,向下滚动可显示aliases词典,并添加了以下内容:
' aliases '=[ ' socialite '=laravelsocialitefacadessocialite 33603360 class,//添加行],5,事件处理程序eventservice
在app/providers/eventserviceprovider.PHP文件中,找到$listen数组并添加:
protected $listen=[ //下一个处理器' socialite providersmanagersocialitewascalled '=[ ' socialite providersQQ下一个处理器
在上一节的结尾,我们讨论了所需的参数。
将以下内容添加到配置文件config/services.php中:
' QQ'=['client_id'=env ',' QQ_key'],' client_secret'=env ',' QQ_secret ' ',' redirect'=env
QQ _ key=appid QQ _ secret=appkey QQ _ redirect _ uri='网站回调地址' 7,添加路由
在web.php根文件中,添加以下根: 各路线的说明请参考注释。
//qq回叫路径,QQ互连平台和一直路由: get (/plugin/qqlog in/callback.PHP ),' auth controller @ callble //qq登录路径可以定制路由:3360 get (/log in/QQ )、()自动控制器@ qqlog in )。 8、建立控制类
phpartisanmake : controllerauthcontroller 9、控制类内容的创建和测试:
? hpnamespaceapphttpcontrollers; use IlluminateHttpRequest; uselaravelsocialitefacadessocialite; classauthcontrollerextendscontroller {//
//跳转QQ登录按钮 public function qqLogin() { return Socialite::driver('qq')->redirect(); } //登录的回调 public function callback() { //获取回调信息 $userInfo = Socialite::driver('qq')->user(); //打印返回的信息,有基本信息字段和详细信息数组 //dd($userInfo); // 获取基本信息 echo '用户ID:' . $userInfo->getId() . '<br>'; echo '用户头像URL:' . $userInfo->getAvatar() . '<br>'; echo '用户昵称:' . $userInfo->getNickname() . '<br>'; //获取更加详细的西乡 $user = $userInfo->user; echo '性别:' . $user['gender'] . '<br>'; echo '性别:' . $user['gender_type'] . '<br>'; echo '省份:' . $user['province'] . '<br>'; echo '城市:' . $user['city'] . '<br>'; echo '年:' . $user['year'] . '<br>'; }} 3. 效果测试1、访问登录页面,路由中已设置网址为:http://yourdomain.com/login/qq
2、自动跳转至登录QQ官方的授权登录页面
3、扫码或者快捷登录后,即可跳转至回调页面:http://yourdomain.com/plugin/qqlogin/callback.php
如果跳转后,出现 CURL出现code ERROR 60错误,请看最后一节。
4、如上源码,将回调信息,使用dd函数,打印出来,是这样的:
5、可以对一些关键信息打印,如上源码注释,打印信息如下:
4. 获取unionid在上面的结果图片中,通过dd函数,打印的返回结果,最后的unionid值为空。
所以,需要单独获取该用户的unionid,只需要一个get请求即可搞定。
官网获取unionid的介绍:https://wiki.connect.qq.com/unionid%E4%BB%8B%E7%BB%8D
首先,修改回调控制类的方法,修改如下:
//登录的回调 public function callback() { //获取基本信息 $userInfo = Socialite::driver('qq')->user(); //打印返回的信息,有基本信息字段和详细信息数组 //dd($userInfo); //通过dd打印,可以看出,基本信息中的 unionid 为空,可以发送get请求获取 //发送get请求,获取 unionid $userInfo2 = Http::get('https://graph.qq.com/oauth2.0/me?access_token=' . $userInfo->accessTokenResponseBody['access_token'] . '&unionid=1&fmt=json'); $userInfo2 = json_decode($userInfo2, true); //dd($userInfo2); $unionid = $userInfo2['unionid']; // 获取基本信息 echo '用户ID:' . $userInfo->getId() . '<br>'; echo '用户unionid:' . $unionid . '<br>'; echo '用户头像URL:' . $userInfo->getAvatar() . '<br>'; echo '用户昵称:' . $userInfo->getNickname() . '<br>'; //获取更加详细的信息 $user = $userInfo->user; echo '性别:' . $user['gender'] . '<br>'; echo '性别:' . $user['gender_type'] . '<br>'; echo '省份:' . $user['province'] . '<br>'; echo '城市:' . $user['city'] . '<br>'; echo '年:' . $user['year'] . '<br>'; }其实只添加了三行代码。
然后,第19行,即打印获取的unionid,截图如下:
这里注意,代码第12行处的get 请求,参考自:https://learnku.com/articles/47768
5、测试阶段的一个问题参考自:https://my.oschina.net/u/4346195/blog/3499485
1、访问https://curl.haxx.se/ca/cacert.pem 下载名为 cacert.pem 的文件
2、将该文件放在某个文件夹下(比如桌面),然后复制其路径,如:C:UserszhangsanDesktopcacert.pem
3、然后打开 php.ini 文件,找到最后面的 curl.cainfo = ,将其取消注释,并修改为 curl.cainfo = cacert.pem文件路径 ,保存即可。如:
[curl]; A default value for the CURLOPT_CAINFO option. This is required to be an; absolute path.curl.cainfo = "C:UserszhangsanDesktopcacert.pem"重启phpstudy。
参考资料:
https://learnku.com/articles/24984https://my.oschina.net/u/4346195/blog/3499485https://learnku.com/articles/47768https://wiki.connect.qq.com/unionid%E4%BB%8B%E7%BB%8D