Laravel 第三方登錄之 Socialite Providers

Laravel 框架在 PHP 以優雅著稱,獲得很多同行之人稱讚;也招攬了,無數的第三方擴展包,擴展了框架的各個方面功能,本篇文章,採用 Socialite Providers,以開源中國OpenApi 實現的OAuth2 爲例實現第三方登錄,體驗 Laravel 之優雅。php

Socialite

SocialiteLaravel 官方提供的實現 Oauth Client 的擴展包,用於實現各廠商提供的第三方登錄,並在其官方文檔中有詳盡的使用步驟描述,可點擊如下連接查看:laravel

Socialite 的使用十分方便,但其只提供了: Facebook、 Twitter、 LinkedIn、 Google、GitHub 和 Bitbucket 受權。並在在其 Github 上,標明 We are not accepting new adapters. (咱們不接受新的適配器),可是官方推薦採用由社區運營的 Socialite Providers 來實現其餘廠商的社會化登錄。git

Socialite Providers

Socialite Providers 是基於 Socialite 的一個第三方登錄擴展包,由社區運做;其經過 LaravelEvent 機制來註冊適配器,現已實現 123 (撰文時數據)個不一樣廠商的第三方登錄,同時支持 OAuth 1 & OAuth 2github

其中包括國內常見的: Weixinweiboqqdouban 的適配器,我也已於前幾日提交了oschina 的適配器,並已於今日經過審覈合入主幹:Added OSChina oAuth2 Providerapi

主頁:https://socialiteproviders.netlify.com數組

Github:https://github.com/SocialiteProviders緩存

OSChina: https://github.com/SocialiteProviders/OSChina安全

具體步驟

新建 Laravel 項目

composer create-project --prefer-dist laravel/laravel blog

本篇文章適合已經對 Laravel 框架有所瞭解的讀者,具體安裝,請見安裝微信

引入擴展包

composer require socialiteproviders/oschina

註冊服務

當擴展包引入完成後,在項目配置文件中添加 \SocialiteProviders\Manager\ServiceProvider::class 服務,若是你曾增長 Laravel\Socialite\SocialiteServiceProvide 服務(Socialite 擴展註冊的),請移除:app

  • 移除 config\app.php 文件中, providers[] 數組裏的 Laravel\Socialite\SocialiteServiceProvider (若是有的話)。
  • 添加 \SocialiteProviders\Manager\ServiceProvider::classconfig\app.php 文件中的 providers[] 數組裏。
'providers' => [
		// a whole bunch of providers
		// remove 'Laravel\Socialite\SocialiteServiceProvider',
		\SocialiteProviders\Manager\ServiceProvider::class, // add
	];

添加事件監聽

在項目 app/Providers/EventServiceProvider.php 文件的 protected $listen 數組屬性中,添加 \SocialiteProviders\Manager\SocialiteWasCalled::class 事件,併爲其添加對應適配器的監聽器 \SocialiteProviders\OSChina\OSChinaExtendSocialite::class (oschina 對應的是這個,可也能夠添加多個對應的適配器提供的監聽器)。

/**
     * The event listener mappings for the application.
     *
     * @var array
     */
    protected $listen = [
        // 第三方登錄
        \SocialiteProviders\Manager\SocialiteWasCalled::class => [
            \SocialiteProviders\OSChina\OSChinaExtendSocialite::class
        ],
    ];

註冊監聽器時,請確保已經安裝對應的適配器包,不然可能找不到對應的事件監聽器。

添加配置

請確保您已在 應用管理 頁面建立應用,並取得對應的相關:應用ID應用私鑰回調地址,配置中須要用到。

請在配置文件 config/services.php 中添加對應的信息:

'oschina' => [
		'client_id' => env('OSCHINA_KEY'),
		'client_secret' => env('OSCHINA_SECRET'),
		'redirect' => env('OSCHINA_REDIRECT_URI')
	],

爲了調試和安全,這裏我將具體的配置信息,放在 .env 文件中了,您可根據實際狀況修改。

同時請注意 Laravel 的配置緩存 php artisan config:cache; 若是您經過 php artisan server,還須要重啓命令。

新建控制器

app\Http\Controllers\Auth 新建控制器 OSChinaController.php 文件:

<?php
/**
 * Created by PhpStorm.
 * User: dingdayu
 * Date: 2019/1/11
 * Time: 01:07
 */

namespace App\Http\Controllers\Auth;


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

/**
 * 開源中國受權
 *
 * Class OSChinaController
 * @package App\Http\Controllers\Auth
 */
class OSChinaController extends Controller
{

    /**
     * 跳轉至第三方登錄
     *
     * @return mixed
     */
    public function redirect()
    {
        // return \Socialite::with('oschina')->scopes(array('email'))->redirect();
        return Socialite::with('oschina')->redirect();
    }

    /**
     * 第三方登錄回跳
     */
    public function callback()
    {
        $oauthUser = Socialite::with('oschina')->user();

        var_dump($oauthUser->getId());
        var_dump($oauthUser->getNickname());
        var_dump($oauthUser->getName());
        var_dump($oauthUser->getEmail());
        var_dump($oauthUser->getAvatar());
    }
}

添加跳轉路由

Route::prefix('auth')->namespace('Auth')->group(function () {
    // 開源中國
    Route::get('oschina', 'OSChinaController@redirect');
    Route::get('oschina/callback', 'OSChinaController@callback');

    // QQ
    //Route::get('qq', 'QQController@redirect');
    //Route::get('qq/callback', 'QQController@callback');
});

QQ 是QQ登陸的路由

驗證

訪問:

http://host/oauth/oschina

請替換 host

若是前面配置沒有問題,而且項目安裝沒有問題,此時應該會跳轉至 oschina 的受權詢問頁面,會顯示須要受權的列表,點擊 鏈接 回跳轉回剛纔的網站,http://host/oschina/callback, 會在 OSChinaControllercallback 方法,將用戶的信息打印出來。

相關文章推薦

  1. Laravel5.1 實現第三方登陸認證(包括微博、QQ、微信、豆瓣)
相關文章
相關標籤/搜索