Laravel
框架在 PHP
以優雅著稱,獲得很多同行之人稱讚;也招攬了,無數的第三方擴展包,擴展了框架的各個方面功能,本篇文章,採用 Socialite Providers,以開源中國 的OpenApi
實現的OAuth2
爲例實現第三方登錄,體驗 Laravel
之優雅。php
Socialite
是 Laravel
官方提供的實現 Oauth Client
的擴展包,用於實現各廠商提供的第三方登錄,並在其官方文檔中有詳盡的使用步驟描述,可點擊如下連接查看:laravel
Socialite
的使用十分方便,但其只提供了: Facebook、 Twitter、 LinkedIn、 Google、GitHub 和 Bitbucket 受權。並在在其 Github 上,標明 We are not accepting new adapters.
(咱們不接受新的適配器),可是官方推薦採用由社區運營的 Socialite Providers
來實現其餘廠商的社會化登錄。git
Socialite Providers
是基於 Socialite
的一個第三方登錄擴展包,由社區運做;其經過 Laravel
的 Event
機制來註冊適配器,現已實現 123
(撰文時數據)個不一樣廠商的第三方登錄,同時支持 OAuth 1 & OAuth 2
。github
其中包括國內常見的: Weixin
,weibo
,qq
,douban
的適配器,我也已於前幾日提交了oschina
的適配器,並已於今日經過審覈合入主幹:Added OSChina oAuth2 Provider。api
主頁:https://socialiteproviders.netlify.com數組
Github:https://github.com/SocialiteProviders緩存
OSChina: https://github.com/SocialiteProviders/OSChina安全
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::class
到 config\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
, 會在 OSChinaController
的 callback
方法,將用戶的信息打印出來。