Socialite 社會(huì)化登錄
Socialite 社會(huì)化登錄
Laravel 社會(huì)化登錄
簡(jiǎn)介
除了典型的基于表單的身份驗(yàn)證之外,Laravel 還提供了一種使用 Laravel Socialite 對(duì) OAuth providers 進(jìn)行身份驗(yàn)證的簡(jiǎn)單方便的方法。 Socialite 目前支持 Facebook,Twitter,LinkedIn,Google,GitHub,GitLab 和 Bitbucket 的身份驗(yàn)證。
其他平臺(tái)的驅(qū)動(dòng)器可以在 Socialite Providers 社區(qū)驅(qū)動(dòng)網(wǎng)站查找。
升級(jí) 社會(huì)化登錄
升級(jí)到 Socialite 的新主要版本時(shí),請(qǐng)務(wù)必仔細(xì)查看 升級(jí)指南.
安裝
在開(kāi)始使用社會(huì)化登錄功能之前,通過(guò) Composer 將 laravel/socialite 包添加到你的項(xiàng)目依賴?yán)锩妫?/p>
composer require laravel/socialite
配置
在使用 Socialite 之前,您還需要為應(yīng)用程序使用的 OAuth 服務(wù)添加憑據(jù)。 這些憑證應(yīng)該放在你的 config / services.php
配置文件中,并且應(yīng)該使用密鑰 facebook
,twitter
,linkedin
,google
,github
,gitlab
或 bitbucket
, 取決于您的應(yīng)用程序所需的提供商。 例如:
'github' => [ 'client_id' => env('GITHUB_CLIENT_ID'), 'client_secret' => env('GITHUB_CLIENT_SECRET'), 'redirect' => 'http://your-callback-url', ],
如果
redirect
項(xiàng)的值是個(gè)相對(duì)路徑,它會(huì)自動(dòng)解析為全稱 URL 。
路由
接下來(lái),就要對(duì)用戶認(rèn)證了!這需要兩個(gè)路由:一個(gè)路由用于把用戶重定向到 OAuth 提供器,另一個(gè)則用于在認(rèn)證完成后接收相應(yīng)提供器的回調(diào)請(qǐng)求。可以通過(guò) facade 方式 Socialite::
來(lái)訪問(wèn) Socialite:
<?php namespace App\Http\Controllers\Auth;use Socialite; class LoginController extends Controller{ /** * Redirect the user to the GitHub authentication page. * * @return \Illuminate\Http\Response */ public function redirectToProvider() { return Socialite::driver('github')->redirect(); } /** * Obtain the user information from GitHub. * * @return \Illuminate\Http\Response */ public function handleProviderCallback() { $user = Socialite::driver('github')->user(); // $user->token; } }
redirect
方法負(fù)責(zé)將用戶發(fā)送到 OAuth 提供程序,而 user
方法將讀取傳入請(qǐng)求并從提供程序檢索用戶的信息。
當(dāng)然,還需要在你的控制器方法中定義好路由規(guī)則:
Route::get('login/github', 'Auth\LoginController@redirectToProvider'); Route::get('login/github/callback', 'Auth\LoginController@handleProviderCallback');
可選參數(shù)
許多 OAuth 提供程序支持重定向請(qǐng)求中的可選參數(shù)。 要在請(qǐng)求中包含任何可選參數(shù),請(qǐng)使用關(guān)聯(lián)數(shù)組調(diào)用 with
方法:
return Socialite::driver('google') ->with(['hd' => 'example.com']) ->redirect();
使用
with
方法時(shí),注意不要傳遞任何保留的關(guān)鍵字,如state
或response_type
。
訪問(wèn)作用域
在重定向用戶之前,您還可以使用 scopes
方法在請(qǐng)求中添加其他「作用域」。 此方法將所有現(xiàn)有范圍與您提供的范圍合并:
return Socialite::driver('github') ->scopes(['read:user', 'public_repo']) ->redirect();
您可以使用 setScopes
方法覆蓋所有現(xiàn)有范圍:
return Socialite::driver('github') ->setScopes(['read:user', 'public_repo']) ->redirect();
無(wú)認(rèn)證狀態(tài)
stateless
方法可用于禁用會(huì)話狀態(tài)驗(yàn)證。 在向 API 添加社交身份驗(yàn)證時(shí),這非常有用:
return Socialite::driver('google')->stateless()->user();
獲取用戶實(shí)例
有了用戶實(shí)例之后,就可以獲取更多用戶詳情:
$user = Socialite::driver('github')->user(); // OAuth2 Providers $token = $user->token; $refreshToken = $user->refreshToken; // not always provided $expiresIn = $user->expiresIn; // OAuth1 Providers $token = $user->token; $tokenSecret = $user->tokenSecret; // 獲取所有 Providers $user->getId(); $user->getNickname(); $user->getName(); $user->getEmail(); $user->getAvatar();
從令牌中檢索用戶詳細(xì)信息 (OAuth2)
如果你已經(jīng)有了一個(gè)用戶的有效訪問(wèn)令牌,你可以使用 userFromToken
方法檢索用戶的詳細(xì)信息。
$user = Socialite::driver('github')->userFromToken($token);
從令牌和秘鑰中檢索用戶詳細(xì)信息 (OAuth1)
如果你已經(jīng)有了一個(gè)有效的用戶令牌 / 秘鑰,你可以使用 userFromTokenAndSecret
方法檢索他們的詳細(xì)信息:
$user = Socialite::driver('twitter')->userFromTokenAndSecret($token, $secret);