很多时候,为了让用户使用的更方面,往往网站中都会集成一些第三方登录的功能。
我们这一集的课程,就来实现以下QQ登录
,你把这个技术学会了后,再去做其他的微博
、github
登录等等,都是一样的道理了。
先去login.blade.php
中放上这三个按钮。
<div class="am-btn-group">
<a href="/auth/qq" class="am-btn am-btn-secondary am-btn-sm"><i class="am-icon-qq am-icon-sm"></i> QQ</a>
<a href="#" class="am-btn am-btn-danger am-btn-sm"><i class="am-icon-weibo am-icon-sm"></i> Weibo</a>
<a href="#" class="am-btn am-btn-default am-btn-sm"><i class="am-icon-github am-icon-sm"></i> Github</a>
</div>
<br>
<br>
socialite
实现第三方登录,需要用到一个 composer 包,http://socialiteproviders.github.io/providers/qq.html
composer require socialiteproviders/qq
配置
修改app/Providers/EventServiceProvider
protected $listen = [
//...
'SocialiteProviders\Manager\SocialiteWasCalled' => [
'SocialiteProviders\QQ\QqExtendSocialite@handle',
],
];
.env
中增加 qq 登录的 key 和秘钥
QQ_KEY=101447483
QQ_SECRET=985689fd7e115ec9bd6a458d065dad43
QQ_REDIRECT_URI=http://localhost:8000/auth/qq/callback
找到config/services.php
return [
//...
'qq' => [
'client_id' => env('QQ_KEY'),
'client_secret' => env('QQ_SECRET'),
'redirect' => env('QQ_REDIRECT_URI'),
],
];
controller
新建一个处理第三方登录
的控制器
php artisan make:controller Auth/SocialitesController
//...
use Socialite;
class SocialitesController extends Controller
{
//跳转到QQ授权页面
public function qq()
{
return Socialite::with('qq')->redirect();
}
//用户授权后,跳转回来
public function callback()
{
$info = Socialite::driver('qq')->user();
dump($info);
}
}
route
配置一下相关的路由
Route::get('/auth/qq', 'Auth\SocialitesController@qq');
Route::get('/auth/qq/callback', 'Auth\SocialitesController@callback');
这样写用起来是完全没有问题的,但是可以看到有不少重复代码。
那么我们可以把这些重复的命名空间和前缀,拿到公共部分。可以参考https://laravel.com/docs/5.5/routing#route-group-prefixes
Route::namespace('Auth')->prefix('auth/qq')->group(function () {
Route::get('/', 'SocialitesController@qq');
Route::get('callback', 'SocialitesController@callback');
});
现在就可以来访问试试了。
Tips:
这里需要注意下,因为我在 QQ 互联的后台上已经写死了回调地址。
所以无论你是用 mac 还是 win 开发,都必须使用 php artisan serve 启动服务。
并且浏览器访问的地址,一定要是http://localhost:8000
,用http://127.0.0.1:8000
也是错误的。