* * * * *
[TOC]
## 簡介
除了典型的基于表單的認證之外, Laravel 同時提供一種簡單便捷的方式授權通過 OAuth providers 使用?[Laravel Socialite](https://github.com/laravel/socialite)。 社會化登錄現在支持通過 Facebook、 Twitter、 LinkedIn、 Google、GitHub 和 Bitbucket 授權。
> {提示}其他平臺的驅動器可以在?[Socialite Providers](https://socialiteproviders.github.io/)?社區驅動網站查找。
## 安裝
在開始使用社會化登錄功能之前,通過 Composer 將 laravel/socialite 包添加到你的項目依賴里面:
~~~
composer require laravel/socialite
~~~
## 配置
使用 Socialite 前,需要先添加上應用程序所使用的 OAuth 服務的憑證。憑證應該保存在配置文件?`config/services.php`?當中,可使用的鍵名有?`facebook`、`twitter`、?`linkedin`、?`google`、?`github`或?`bitbucket`,要根據你應用程序需要的提供器來確定鍵名。例如:
~~~
'github' => [
'client_id' => env('GITHUB_CLIENT_ID'), // 你的 GitHub Client ID
'client_secret' => env('GITHUB_CLIENT_SECRET'), // 你的 GitHub Client Secret
'redirect' => 'http://your-callback-url',
],
~~~
> {tip} 如果?`redirect`?項的值是個相對路徑,它會自動解析為全稱 URL 。
## 路由
接下來,就要對用戶認證了!這需要兩個路由:一個路由用于把用戶重定向到 OAuth 提供器,另一個則用于在認證完成后接收相應提供器的回調請求。可以通過 facade 方式?`Socialite`?來訪問 Socialite:
~~~
<?php
namespace App\Http\Controllers\Auth;
use Socialite;
class LoginController extends Controller
{
/**
* 重定向用戶信息到 GitHub 認證頁面。
*
* @return \Illuminate\Http\Response
*/
public function redirectToProvider()
{
return Socialite::driver('github')->redirect();
}
/**
* 獲取來自 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();
~~~
> {note} 當使用?`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();
// OAuth Two Providers
$token = $user->token;
$refreshToken = $user->refreshToken; // not always provided
$expiresIn = $user->expiresIn;
// OAuth One Providers
$token = $user->token;
$tokenSecret = $user->tokenSecret;
// All 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);
~~~
- 前言
- 翻譯說明
- 發行說明
- 升級指南
- 貢獻導引
- 入門指南
- 安裝
- 配置信息
- 文件夾結構
- Homestead
- Valet
- 部署
- 核心架構
- 請求周期
- 服務容器
- 服務提供者
- Facades
- Contracts
- 基礎功能
- 路由
- 中間件
- CSRF 保護
- 控制器
- 請求
- 響應
- 視圖
- URL
- Session
- 表單驗證
- 錯誤
- 日志
- 前端開發
- Blade 模板
- 本地化
- 前端指南
- 編輯資源 Mix
- 安全相關
- 用戶認證
- Passport OAuth 認證
- 用戶授權
- 加密解密
- 哈希
- 重置密碼
- 綜合話題
- Artisan 命令行
- 廣播系統
- 緩存系統
- 集合
- 事件系統
- 文件存儲
- 輔助函數
- 郵件發送
- 消息通知
- 擴展包開發
- 隊列
- 任務調度
- 數據庫
- 快速入門
- 查詢構造器
- 分頁
- 數據庫遷移
- 數據填充
- Redis
- Eloquent ORM
- 快速入門
- 模型關聯
- Eloquent 集合
- 修改器
- API 資源
- 序列化
- 測試相關
- 快速入門
- HTTP 測試
- 瀏覽器測試 Dusk
- 數據庫測試
- 測試模擬器
- 官方擴展包
- Cashier 交易工具包
- Envoy 部署工具
- Horizon
- Scout 全文搜索
- Socialite 社會化登錄