基于Laravel开发的第三方登录插件,支持QQ,新浪微博,百度登录。

安装
composer require huoshaotuzi/sociate
在config/app.php注册服务器提供者:

/*

  • Package Service Providers…
    */
    Huoshaotuzi\Sociate\SociateServiceProvider::class,
    配置发布文件到config文件夹数,这一步也可以不操作:

php artisan vendor:publish --provider=“Huoshaotuzi\Sociate\SociateServiceProvider”
在.env文件添加第三方应用配置信息,目前支持QQ,新浪微博,百度登录,不需要的可以不用添加:

QQ_KEY=
QQ_SECRET=
QQ_REDIRECT_URI=

BAIDU_KEY=
BAIDU_SECRET=
BAIDU_REDIRECT=

WEIBO_KEY=
WEIBO_SECRET=
WEIBO_REDIRECT=

GITHUB_KEY=
GITHUB_SECRET=
GITHUB_REDIRECT=
_KEY即APP_KEY,不同平台的叫法可能不同; _SECRET即SECRET,一串随机的字符串,要注意该字段不能暴露给用户; _REDIRECT即授权回调页地址,百度与微博可以在配置应用自行设置,QQ貌似不支持。

以上,配置完成。

流程说明
第三方登录其实就是第三方平台给你一个跳转到他们页面的链接,用户点击授权之后,平台个人文库第三方会携带一个code参数状语从句:你自定义的state字段重定向到你在应用配置的授权回调页地址,通过code换取用户的access_token,再用access_token换取用户资料,最后把资料保存下来。

基本方法
首先需要在登录页面添加第三方登录引导链接:

l o g i n U r l = a p p ( s o c i a t e ) > d r i v e r ( b a i d u ) > g e t L o g i n U r l ( ) ; d r i v e r ( loginUrl = app('sociate')->driver('baidu')->getLoginUrl(); driver( type)方法接收第三方平台参数,该值可以是qq, ,weibo,baidu不区分大小写(后续更新会支持更多平台)。

getLoginUrl($state)请立即获取iTunes方法参数一个state作为报道查看参数,授权成功后该值会原样返回,不传默认为空。

可以在登录页视图的第三方登录按钮中,使用如下代码:

百度登录
成功登录后使用request(‘state’)电子杂志到登录前的页面,再进行重定向跳转,增加用户体验。

在接下来routes/web.php添加授权回调页路由,授权回调页的地址应该与你的应用配置一致,会否则提示redirect_uri错误:

// 参考我的回调页地址 http://xxx.com/auth/baidu
Route::namespace(‘Oauth’)->prefix(‘auth’)->group(function () {
Route::get(’/qq’, ‘OauthController@qq’);
Route::get(’/weibo’, ‘OauthController@weibo’);
Route::get(’/baidu’, ‘OauthController@baidu’);
});
本地开发时,页回调填写回复时http://127.0.0.1:8000(默认端口)

创建第三方登录控制器:

php artisan make:controller Oauth/OauthController
控制器添加代码:

public function qq()
{
$driver = app(‘sociate’)->driver(‘qq’);
$response = $driver->getAccessToken();
$info = d r i v e r > g e t U s e r I n f o ( driver->getUserInfo( response);
// 如果需要调用到其他接口,此处需要保存 access_token
// dd($response);
// 此处为逻辑处理:存储用户资料或根据 uid 判断用户是否已绑定账号
u s e r = . . . / / A u t h : : l o g i n ( user = ... // 设置为登录状态 Auth::login( user, true);
// 重定向到登录前页面
return redirect(request(‘state’));
}

public function github()
{
$driver = app(‘sociate’)->driver(‘github’);
$response = $driver->getAccessToken();
$info = d r i v e r > g e t U s e r I n f o ( driver->getUserInfo( response);

dd($response, $info);

}

public function weibo()
{
$driver = app(‘sociate’)->driver(‘qq’);
$response = $driver->getAccessToken();
$info = d r i v e r > g e t U s e r I n f o ( driver->getUserInfo( response);

dd($response, $info);

}

public function baidu()
{
$driver = app(‘sociate’)->driver(‘baidu’);
$response = $driver->getAccessToken();
$info = d r i v e r > g e t U s e r I n f o ( driver->getUserInfo( response);

dd($response, $info);

}
值得一提的是,我们只要用到授权登录功能,因此access_token与refresh_token对我们来说没有意义,可以不用保存下来,除非后续需要调用其他接口,像读取用户微博等,token的值会在获取的时候刷新,如果要用到的话记得更新记录。

在控制器中使用

<?php namespace App\Http\Controllers\Oauth; use App\Http\Controllers\Controller; use Huoshaotuzi\Sociate\Sociate; class OauthController extends Controller { // 授权回调页路由的方法 public function qq() { $sociate = new Sociate(); $driver = $sociate->driver('qq'); $accessToken = $driver->getAccessToken(); $user = $driver->getUserInfo($accessToken); dd($user); } } 电子邮件不想如果使用use引入,或在视图不方便使用命名空间,使用则可Laravel提供的辅助方法app()来调用,比较推荐用这种方法。 namespace App\Http\Controllers\Oauth; use App\Http\Controllers\Controller; class OauthController extends Controller { public function qq() { $driver = app('sociate')->driver('qq'); $accessToken = $driver->getAccessToken(); $user = $driver->getUserInfo($accessToken); dd($user); } }**加粗样式**

猜你喜欢

转载自blog.csdn.net/weixin_43746366/article/details/88173824