Socialite 社會化登入
升級社會化登入
除了典型的基於表單的身份驗證之外,Laravel 還提供了一種使用Laravel Socialite 對OAuth providers 進行身份驗證的簡單方便的方法。 Socialite 目前支援 Facebook,Twitter,LinkedIn,Google,GitHub,GitLab 和 Bitbucket 的身份驗證。
社群驅動網站上找到。
#
#設定在使用Socialite 之前,您還需要為應用程式使用的OAuth 服務新增憑證。這些憑證應該放在你的升級社會化登入
升級到Socialite 的新主要版本時,請務必仔細查看升級指南.
##安裝在開始使用社會化登入功能之前,透過Composer 將laravel/socialite 套件加入你的專案依賴裡面:composer require laravel/socialiteconfig / services.php
設定檔中,並且應該使用金鑰
facebook,
twitter,
linkedin,
google,
github,
gitlab或
bitbucket, 取決於您的應用程式所需的提供者。例如:
'github' => [ 'client_id' => env('GITHUB_CLIENT_ID'), 'client_secret' => env('GITHUB_CLIENT_SECRET'), 'redirect' => 'http://your-callback-url', ],如果路由#接下來,就要對使用者認證了!這需要兩個路由:一個路由用於把使用者重定向到 OAuth 提供器,另一個則用於在認證完成後接收對應提供者的回調請求。可以透過facade 方式redirect
項目的值是個相對路徑,它會自動解析為全名 URL 。
Socialite::
來存取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
當然,還需要在你的控制器方法中定義好路由規則:方法負責將使用者傳送到OAuth 提供程序,而
user方法將讀取傳入請求並從提供者檢索使用者的資訊。
Route::get('login/github', 'Auth\LoginController@redirectToProvider'); Route::get('login/github/callback', 'Auth\LoginController@handleProviderCallback');可選參數許多OAuth 提供者支援重定向請求中的可選參數。若要在請求中包含任何可選參數,請使用關聯數組呼叫with
方法:
return Socialite::driver('google') ->with(['hd' => 'example.com']) ->redirect();使用存取作用域在重新導向使用者之前,您也可以使用with
方法時,請注意不要傳遞任何保留的關鍵字,如
state或
response_type。
scopes
方法在請求中加入其他「作用域」。此方法將所有現有範圍與您提供的範圍合併:
return Socialite::driver('github') ->scopes(['read:user', 'public_repo']) ->redirect();您可以使用setScopes
方法覆寫所有現有範圍:
return Socialite::driver('github') ->setScopes(['read:user', 'public_repo']) ->redirect();無認證狀態stateless
方法可用來停用會話狀態驗證。在向 API 新增社交身份驗證時,這非常有用:
return Socialite::driver('google')->stateless()->user();取得使用者實例
有了使用者實例之後,就可以取得更多使用者詳情:
$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();從令牌中擷取使用者詳細資料(OAuth2)
如果你已經有了一個使用者有效的存取令牌,你可以使用
userFromToken
方法來檢索使用者的詳細資訊。$user = Socialite::driver('github')->userFromToken($token);從令牌和秘鑰中檢索使用者詳細資訊(OAuth1)
如果你已經有了一個有效的使用者令牌/ 秘鑰,你可以使用
userFromTokenAndSecret
方法檢索他們的詳細資訊:$user = Socialite::driver('twitter')->userFromTokenAndSecret($token, $secret);