什麼是 Laravel Socialite
Laravel Socialite 是可簡潔實作以 OAuth 2.0 進行社群登入的官方套件。支援 GitHub、Google、Facebook、X(Twitter)、LinkedIn 等主要 provider,能將複雜的 OAuth 實作以少數幾行程式碼完成。 內建支援的 provider 如下:社群登入的流程
安裝
以 Composer 加入套件。將 Socialite 進行主要版本升級時,務必確認 升級指南。
設定
config/services.php
在config/services.php 加入每個 provider 的 client ID、secret、回呼 URL。
redirect 選項若指定相對路徑,會自動解析為完整 URL。.env
以環境變數管理認證資訊。以 GitHub 為例:認證流程
路由
OAuth 認證需要兩條路由:重新導向與回呼。儲存並登入使用者
在回呼路由中取得使用者資訊,儲存到資料庫後登入。取得使用者資訊
從user() 方法回傳的物件,可透過下列屬性/方法取得使用者資訊。
以 access token 取得使用者
從既有 access token 取得使用者資訊,使用userFromToken()。
無狀態模式
在不使用 Cookie session 的 API 中,可用stateless() 方法停用 session 狀態驗證。
資料庫整合
Migration
於users 資料表加上社群登入用欄位。
以 provider 欄位支援多個 provider
若要一起管理多個 provider,通常會採用provider / provider_id 兩欄結構。
與既有使用者連結
若要將帳號連結到 email 相同的既有使用者,可以 email 搜尋後更新欄位。Scope 與選項
加入 scope
以scopes() 方法指定額外 scope。
setScopes() 方法會覆寫既有 scope。
選項參數
以with() 方法在重新導向請求中包含額外參數。
Slack Bot Token
要產生 Slack Bot token,使用asBotUser()。
測試
Socialite 提供測試用的 mock 機制。可在不對實際 provider 發出請求的情況下測試 OAuth 流程。重新導向的測試
回呼的測試
將 user 實例傳給fake() 方法,模擬 provider 回傳的使用者資訊。用 User::fake() 產生假的使用者。
fake() 傳入額外屬性覆寫。
Laravel\Socialite\One\User 類別。
建立自訂 Provider
若想使用內建 provider 以外的服務,官方正規做法是以Socialite::extend() 註冊自訂 driver。SocialiteManager 繼承自 Illuminate\Support\Manager,因此與其他 Laravel driver 系統的擴充機制相同。
關於 Manager 模式與
extend() 的機制,也可參閱 Manager 類別解說。1. 建立 provider 類別
繼承Laravel\Socialite\Two\AbstractProvider,實作 4 個 abstract 方法。
2. 於 Service Provider 註冊
在AppServiceProvider 的 boot() 方法中以 Socialite::extend() 註冊 driver。
3. 加入設定
4. 與一般 Socialite 相同方式使用
註冊後,即可用與內建 provider 完全相同的 API 使用。相關套件
以下是本站作者公開的 Socialite 擴充套件。皆採用Socialite::extend() 的正規做法實作,只需在 config/services.php 加入設定即可使用。
LINE
LINE SDK for Laravel。除了透過 Socialite 的 OAuth 登入外,還整合 Messaging API。
Bluesky
與 AT Protocol(Bluesky)的整合。支援 OAuth 認證與貼文送出。
Discord
Discord OAuth2 登入。
Threads
與 Meta Threads 的整合。支援 OAuth 認證與貼文 API。
Amazon
透過 Login with Amazon 進行 OAuth 登入。
Mastodon
對 Mastodon instance 的 OAuth 登入。
WordPress
對 WordPress.com 與自架 WordPress 的 OAuth 登入。