很多时候,为了让用户使用的更方面,往往网站中都会集成一些第三方登录的功能。

我们这一集的课程,就来实现以下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也是错误的。