Socialite 社會化登入


升級社會化登入

  • ##安裝
  • #配置
  • 路由
  • #可選參數
  • 存取範圍
  • 無認證狀態
  • 檢索使用者詳細資料
  • 簡介
除了典型的基於表單的身份驗證之外,Laravel 還提供了一種使用

Laravel Socialite 對OAuth providers 進行身份驗證的簡單方便的方法。 Socialite 目前支援 Facebook,Twitter,LinkedIn,Google,GitHub,GitLab 和 Bitbucket 的身份驗證。

其他平台的驅動器可以在
Socialite Providers

社群驅動網站上找到。

#

升級社會化登入

升級到Socialite 的新主要版本時,請務必仔細查看升級指南.

##安裝

在開始使用社會化登入功能之前,透過Composer 將laravel/socialite 套件加入你的專案依賴裡面:

composer require laravel/socialite

#設定

在使用Socialite 之前,您還需要為應用程式使用的OAuth 服務新增憑證。這些憑證應該放在你的

config / services.php 設定檔中,並且應該使用金鑰facebooktwitterlinkedingooglegithubgitlabbitbucket, 取決於您的應用程式所需的提供者。例如:

'github' => [ 
   'client_id' => env('GITHUB_CLIENT_ID'),    
   'client_secret' => env('GITHUB_CLIENT_SECRET'),    
   'redirect' => 'http://your-callback-url',
  ],

如果

redirect 項目的值是個相對路徑,它會自動解析為全名 URL 。

路由

#接下來,就要對使用者認證了!這需要兩個路由:一個路由用於把使用者重定向到 OAuth 提供器,另一個則用於在認證完成後接收對應提供者的回調請求。可以透過facade 方式

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 方法時,請注意不要傳遞任何保留的關鍵字,如stateresponse_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);
本文章首發在LearnKu.com 網站上。