Laravel实现QQ登录

Laravel实现QQ登录

环境:
laravel:5.5.40
php: 7.2.2
前置条件,在qq互联有创建应用的权限。https://blog.csdn.net/qq_25615395/article/details/80251094

1. 利用composer安装qq登录的依赖(在命令行输入框)

composer require socialiteproviders/qq

2. 将第三方的登录服务者注册进容器内(config/app.php)

'providers' => [
    // 移除 'Laravel\Socialite\SocialiteServiceProvider',
    SocialiteProviders\Manager\ServiceProvider::class, // 添加
];

3. 添加门脸类(config/app.php)

'Socialite' => Laravel\Socialite\Facades\Socialite::class,

4. 添加事件监听器(App/Providers/EventServiceProvider

protected $listen = [
    'SocialiteProviders\Manager\SocialiteWasCalled' => [
        'SocialiteProviders\Qq\QqExtendSocialite@handle',//这里的SocialiteProviders\Qq\QqExtendSocialite@handle,里面有个q改成大写
     'SocialiteProviders\QQ\QqExtendSocialite@handle',//改成这样就对了,之前如果那个q是小写的话会报找不到类的错误。
 ], ];

5. 在config/service.php添加QQ接口信息

'qq' => [
    'client_id' => env('QQ_KEY'),
    'client_secret' => env('QQ_SECRET'),
    'redirect' => env('QQ_REDIRECT_URI'),  
], 

6. 在.env里面QQ接口的信息

QQ_KEY=xxxxxx
QQ_SECRET=xxxxxx
QQ_REDIRECT_URI=xxxxxx

QQ_KEYQQ_SECRET需要在qq互联上申请,QQ_REDIRECT_URI需要在qq互联上设置。
这里的回调地址必须要跟qq互联管理中心(https://connect.qq.com)设置的回调地址一样。

7. 添加路由routes/web.php

// 登录界面的展示
Route::get('auth/{service}', 'Auth\SocialiteLoginController@redirectToProvider')->name('socialite_login_form');
// 登录回调的处理
Route::get('auth/{service}/callback', 'Auth\SocialiteLoginController@handleProviderCallback')->name('socialite_login');

8. 前台登录界面的使用

<div class="form-group">
    <div class="col-md-8 col-md-offset-4">
        <button type="submit" class="btn btn-primary">
            登录
        </button>

        <a class="btn btn-link" href="{{ route('password.request') }}">
            忘记密码?
        </a>
        <a class="btn btn-link" href="{{route('socialite_login_form','qq')}}"><i class="fa fa-qq"></i> qq登录</a>
    </div>
</div>

9. 添加控制器App\Http\Controllers\Auth\SocialiteLoginController.php

<?php

namespace App\Http\Controllers\Auth;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Laravel\Socialite\Facades\Socialite;

/**
 * 第三方登录控制器
 *
 * Class SocialiteLoginController
 * @package App\Http\Controllers\Auth
 */
class SocialiteLoginController extends Controller
{
    /**
     * 第三方登录用户信息的展示
     *
     * @param $service
     * @return mixed
     */
    public function redirectToProvider($service)
    {
        return Socialite::driver($service)->redirect();
    }

    /**
     * 处理第三方登录的回调
     *
     * @param $service
     */
    public function handleProviderCallback($service)
    {
        $user = Socialite::driver($service)->user();
        dd($user);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_25615395/article/details/80251455