Laravel第三方登录开发之实现QQ登录

news/2025/2/4 3:55:12/

在我们的项目开发中,第三方登录可以很好的为用户提供便捷,比如微信、QQ、微博登录等等。

Laravel,作为一个优雅的PHP框架,已经集成了诸多第三方登录插件。

本文,将详细论述如何在Laravel框架中,实现QQ登录。

1. 准备工作

进行开发之前,首先需要在QQ互联平台创建应用

1、前往QQ互联中心(网址:https://connect.qq.com/manage.html#/)登录注册,并完成开发者实名认证

image-20210318150547785

2、点击下方的创建应用按钮,弹出框选择创建网站应用

image-20210318150703739

3、填写应用的基本资料

image-20210318150959178

这里注意,网站名称需要是网站ICP备案号的名称,否则审核不通过。

4、完善资料,然后点击创建应用即可。

image-20210318151037087

这里注意:

  • 网站回调地址,可以填写多个,这个要记住,开发过程要用这个地址。比如:http://www.domain.com/oauth/qq
  • 提供方,即域名备案的主体,个人即为姓名。

5、等待审核通过。

image-20210318151421998

5、应用审核通过后,点击应用的查看按钮,即可看到应用的APP IDAPP Key

image-20210318151540249

6、应用接口处,unionid接口,选择接入

至此,前期准备工作完成,开发过程中,至需要三个参数:

  • APP ID
  • APP Key
  • 网站回调地址

2. 实现QQ登录,并获取用户基本信息

1、创建一个Laravel项目

如何创建?点击此处查看

2、添加依赖插件/服务

打开Terminal,使用如下 composer 命令即可添加

composer require socialiteproviders/qq

如图:

image-20210318152140043

3、添加服务提供器Service Provider

打开文件 config/app.php ,找到 provider 字典,添加的内容如下:

'providers' => [//Laravel\Socialite\SocialiteServiceProvider::classo //有博文说,如果有这行,请注释掉SocialiteProviders\Manager\ServiceProvider::class,//添加这样
],

4、添加门面Facades Aliase

同样在 config/app.php 中,往下翻,即可看到 aliases 字典,添加的内容如下:

'aliases' => ['Socialite' => Laravel\Socialite\Facades\Socialite::class,//追加这行
],

5、添加事件处理器 EventServiceProvider

在文件 app/Providers/EventServiceProvider.php 中,找到 $listen 数组,添加内容如下:

protected $listen = [//添加下面这个处理器'SocialiteProviders\Manager\SocialiteWasCalled' => ['SocialiteProviders\QQ\QqExtendSocialite@handle',],
];

6、配置参数

在上一节的末尾,说明了需要的参数。

在配置文件 config/services.php 中,添加如下内容:

'qq' => ['client_id' => env('QQ_KEY'),'client_secret' => env('QQ_SECRET'),'redirect' => env('QQ_REDIRECT_URI'),  
], 

然后在 .env 文件中,设置参数

QQ_KEY=APP ID
QQ_SECRET=APP Key
QQ_REDIRECT_URI="网站回调地址"

7、添加路由

web.php 路由文件中,添加如下路由,其中各个路由的说明见注释。

//qq回调的路径,和QQ互联平台一直
Route::get('/plugin/qqlogin/callback.php','AuthController@callback');
//qq登录的路径,可以自定义
Route::get('/login/qq','AuthController@qqLogin');

8、创建控制类

php artisan make:controller AuthController

9、编写控制类内容,并测试:

<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;
use Laravel\Socialite\Facades\Socialite;class AuthController extends Controller
{////跳转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官方的授权登录页面

image-20210318162116461

3、扫码或者快捷登录后,即可跳转至回调页面:http://yourdomain.com/plugin/qqlogin/callback.php

如果跳转后,出现 CURL出现code ERROR 60错误,请看最后一节。

4、如上源码,将回调信息,使用dd函数,打印出来,是这样的:

image-20210318162335899

5、可以对一些关键信息打印,如上源码注释,打印信息如下:

image-20210318162428626

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,截图如下:

image-20210318165323085

这里注意,代码第12行处的get 请求,参考自:https://learnku.com/articles/47768

image-20210318165227728

5、测试阶段的一个问题

参考自:https://my.oschina.net/u/4346195/blog/3499485

1、访问https://curl.haxx.se/ca/cacert.pem 下载名为 cacert.pem 的文件

2、将该文件放在某个文件夹下(比如桌面),然后复制其路径,如:C:\Users\zhangsan\Desktop\cacert.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:\Users\zhangsan\Desktop\cacert.pem"

重启phpstudy。

参考资料:

  1. https://learnku.com/articles/24984
  2. https://my.oschina.net/u/4346195/blog/3499485
  3. https://learnku.com/articles/47768
  4. https://wiki.connect.qq.com/unionid%E4%BB%8B%E7%BB%8D

http://www.ppmy.cn/news/699405.html

相关文章

电脑登陆不了网页的服务器地址,电脑登陆qq打不开网页怎么设置

当我们遇到上QQ不能打开网页的时候&#xff0c;其实这些都是电脑的DNS解析出问题了&#xff0c;怎么办。下面是学习啦小编为大家整理的关于电脑登陆qq打不开网页的相关资料&#xff0c;希望对您有所帮助! 电脑登陆qq打不开网页的解决方法 第一步、清除DNS解析缓存 我们的系统会…

Python利用selenium实现自动登录网页qq

就在刚刚&#xff0c;终于实现了自动登录网页的功能&#xff0c;牛蛙牛蛙&#xff0c;今天来写一下笔记&#xff0c;防止以后忘了&#xff0c;哈哈哈&#xff0c;我这个人记性不好。明天就可以写那个程序来自动登录“开学通知”了&#xff0c;嘿嘿嘿。话不多说&#xff0c;直接…

登陆页面html5代码qq,HTML5QQ登录的一篇代码分享

html5背景 *{margin:0;padding:0;list-style-type:none;} a,img{border:0;} $(function () {if (!window.ActiveXObject && !!document.createElement("canvas").getContext) {$.getScript("http://im-img.qq.com/pcqq/js/200/cav.js?_=1428576021379&…

PHP QQ网页三方登录

一、在QQ互联上注册成为开发者 注册指南地址&#xff1a; http://wiki.connect.qq.com/%E6%88%90%E4%B8%BA%E5%BC%80%E5%8F%91%E8%80%85 二、创建应用&#xff0c;获取APP ID和APP Key 创建应用指南地址&#xff1a;http://wiki.connect.qq.com/__trashed-2 1、进入QQ互联后台…

网站接入QQ登录最新2020 java版本

1.首先先注册账号,然后填资料审核,等个三四天吧大概 https://connect.qq.com/ 2.审核通过后点击创建应用,把备案号什么的都填(这个审核两天之内一般) !!! 这里有个重点,网站地址只能填一下,回调地址随便填一个,通过后可以随便改的 3. 整理java代码 我的是springBoot项目 先导入…

qq快捷登陆 php代码,qq互联--qq快捷登陆

1、介绍 QQ登录接口。作用是实现QQ直接登录某些网站&#xff0c;简化用户登录、注册流程。 现在有很多大型网站都在使用QQ互联登录功能&#xff1a; X东&#xff1a; X宁&#xff1a; X美&#xff1a; 2、签约 ①点击“应用管理” image.png ②如果资料没有审核通过的话&#x…

python打开qq并登录_python爬虫入门之qq登陆初探

不得不承认:这篇文章的方法有些小猥琐。 作为一个非专业人士,qq登陆这件事困扰我很长时间。在没有头绪满头乱撞的时候,无意间我发现了一件大杀器:splinter!!!这个python的第三方库会操纵你的浏览器(默认是火狐),打开页面,与网页进行交互。妈妈再也不用担心什么加密什么…

Python+Selenium-4:模拟用户登录QQ网页版

PythonSelenium-4&#xff1a;模拟用户登录QQ网页版 ​ QQ网站 : 点击直达 需求&#xff1a;点击右上角登录&#xff0c;再使用密码登录QQ 代码实例 from selenium import webdriver # 导入webdriver模块 from selenium.webdriver.common.by import By # 导入By模块 impor…