简介
socialit 可用Google、Facebook、Linkedin、微博、QQ、微信公众平台、微信开放平台、豆瓣
laravel-socialit上面那个的扩展,可以在Laravel中使用
我们的应用与使用 OAuth 标准的第三方应用的交互流程一般是这样的:
- 展示跳转到第三方应用登录的链接
- 用户点击链接跳转到第三方应用登录并进行授权
- 在用户授权后第三方应用会跳转到我们所指定的应用回调资源地址并伴随用于交互 AccessToken 的 Code
- 我们的应用拿到 Code 后自主请求第三方应用并使用 Code 获取该用户的 AccessToken
- 获取 AccessToken 之后的应用即可自主的从第三方应用中获取用户的资源信息
Laravel Socialite UML
1821058-76b792e3240cadbe.jpg安装 Laravel Socialite
用composer安装
$ composer require "overtrue/laravel-socialite:~1.0"
配置
你需要在 config/app.php
的 providers
键中追加:
Overtrue\LaravelSocialite\ServiceProvider::class,
aliases
中追加
'Socialite' => Overtrue\LaravelSocialite\Socialite::class,
在 config/services.php
配置文件中添加驱动器配置项:
'github' => [
'client_id' => 'your-app-id',
'client_secret' => 'your-app-secret',
'redirect' => 'http://localhost/socialite/callback.php',
],
'weibo' => [
'client_id' => 'your-app-id',
'client_secret' => 'your-app-secret',
'redirect' => 'http://localhost/socialite/callback.php',
],
'qq' => [
'client_id' => 'your-app-id',
'client_secret' => 'your-app-secret',
'redirect' => 'http://localhost/socialite/callback.php',
],
使用
添加好路由
Route::any('/oauth/qq', 'User\UserIndexController@qqRedirect');
Route::any('/oauth/qq/callback', 'User\UserIndexController@qqCallback');
Route::any('/oauth/weibo', 'User\UserIndexController@weiboRedirect');
Route::any('/oauth/weibo/callback', 'User\UserIndexController@weiboCallback');
创建好对应的控制器然后写调用方法,我这边授权后将用户信息判断是否已经绑定用户,没有的话就存到session中,完成注册后保存用户,存在的话直接登录用户。
public function qqRedirect()
{
return Socialite::driver('qq')->redirect();
}
public function qqCallback()
{
$user = Socialite::driver('qq')->user();
$userQQ = UniUserQq::where('id',$user->getId())->first();
if($userQQ){
$uniUser = UniUser::where('ID',$userQQ->user_id)->first();
$this->guard()->login($uniUser);
return redirect('/user/login');
}else{
$userQQ = new UniUserQq();
$userQQ->id = $user->getId();
$userQQ->unionid = $user->getAttributes()['unionid'];
$userQQ->nickname = $user->getNickname();
$userQQ->name = $user->getName();
$userQQ->email = $user->getEmail();
$userQQ->avatar = $user->getAvatar();
$userQQ->gender = $user->getOriginal()['gender'];
$userQQ->province = $user->getOriginal()['province'];
$userQQ->city = $user->getOriginal()['city'];
$userQQ->year = $user->getOriginal()['year'];
session(['userAuth'=>$userQQ]);
$this->redirectReg($user->getNickname());
}
}
public function weiboRedirect()
{
return Socialite::driver('weibo')->redirect();
}
public function weiboCallback()
{
$user = Socialite::driver('weibo')->user();
$userWeibo = UniUserWeibo::where('id',$user->getId())->first();
if($userWeibo){
$uniUser = UniUser::where('ID',$userWeibo->user_id)->first();
$this->guard()->login($uniUser);
return redirect('/user/login');
}else{
$userWeibo = new UniUserWeibo();
$userWeibo->id = $user->getOriginal()['id'];
$userWeibo->idstr = $user->getOriginal()['idstr'];
$userWeibo->class = $user->getOriginal()['class'];
$userWeibo->screen_name = $user->getOriginal()['screen_name'];
$userWeibo->name = $user->getOriginal()['name'];
$userWeibo->location = $user->getOriginal()['location'];
$userWeibo->url = $user->getOriginal()['url'];
$userWeibo->avatar = $user->getOriginal()['avatar_large'];
$userWeibo->gender = $user->getOriginal()['gender'];
$userWeibo->domain = $user->getOriginal()['domain'];
$userWeibo->remark = $user->getOriginal()['remark'];
session(['userAuth'=>$userWeibo]);
return $this->redirectReg($user->getNickname());
}
}
qq.png qq.png image.png注:授权的回调URL都需要设定为你需要回调的域名地址中,不然回调授权后无法跳回页面
网友评论