环境配置:
laravel 5.5
centos7.2
php7.1
参考文章
最近刚学习了laravel这个框架,感觉特别好用,于是用laravel写了一个自己的网站,登录用的是laravel自带的用户认证,由于我平时登录别的网站时喜欢使用第三方登录,于是想自己写个第三方登录玩一下,分别申请了QQ和微信的第三方平台,微信太坑了,明明是个人开发者,在申请表上居然还要盖章,我又没有自己的章,上哪盖去。 QQ的应用很容易就通过了,于是就先写个QQ登录试一下。
1.在QQ互联上创建应用,获得APP ID和APP Key并设置好QQ登录的回调地址
登录之后点击应用管理就可以创建应用啦,当然如果你不是开发者还得先申请成为开发者 ,点击右上角的头像就能够申请了
点击创建应用,我创建的是网站应用
之后填写这个表格就可以了,这个地方注意了网站名称跟简介最好跟你这个网站进行备案的时候填的信息一致,否则有可能审核不通过,会说你跟备案信息不一致
审核很快的,审核通过以后就可以看到你的APP ID和APP Key了,并且需要设置你的回调地址,这里注意了,回调地址一旦设定好就不能改了,所有要谨慎设置你的回调地址
2.开始在laravel上引入第三方组件并配置路由和控制器
首先composer安装组件
composer require socialiteproviders/qq
打开config/app.php文件,注册服务提供者,如果用了laravel自带的社会化登陆要先注释掉
'providers' => [
SocialiteProviders\Manager\ServiceProvider::class, // 添加
];
在该文件下方的aliases中添加这样一行
'aliases'=>[
'Socialite' => Laravel\Socialite\Facades\Socialite::class, //添加
]
打开app/Providers/EventServiceProvider.php,添加事件监听器
protected $listen = [
'SocialiteProviders\Manager\SocialiteWasCalled' => [
'SocialiteProviders\QQ\QqExtendSocialite@handle',
],
];
在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= http://www.example.com/qq //你设置的回调地址
为QQ登陆设置对应的路由,切记QQ登陆的路由不要放到带有auth中间件的路由组中,否则无法绕过auth自带的验证进行QQ登陆
Auth::routes();
Route::middleware('auth')->group(function (){
Route::any('/', 'HomeController@index')->name('home');
});
Route::get('/qq','QQController@qq'); //进行qq登录的路由
Route::get('/qqlogin','QQController@qqlogin'); //授权回调的路由
对应的控制器方法
public function qq(){
return Socialite::with('qq')->redirect();
}
public function qqlogin(){
$user = Socialite::driver('qq')->stateless()->user();
var_dump($user);
if(!User::where('name',$user->nickname)){
$cur_user = User::create([
'name'=>$user->nickname,
'email'=>'',
'password'=>'',
'remember_token'=>Str::random(60)
]);
}else{
$cur_user=User::where('name',$user->nickname)->first();
}
Auth::login($cur_user);
return redirect('/home');
}
ok,这样就可以进行QQ登陆了,当然微信登陆,微博登陆都是一样的,这个包里面也有对应的方法
欢迎关注「不出户」公众号
在公众号回复「python」,获取全套python学习资源。
在公众号回复「vue」,领取vue核心教程
在公众号回复「react」,领取react全套教程
在公众号回复「angular」,领取angular学习资源
在公众号回复「算法」,领取算法学习教程
在公众号回复「nodejs」,领取nodejs学习教程,更有更多精品资源敬请期待