Skip to main content

什麼是 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 為例:
GitHub 可在 GitHub Developer Settings 建立 OAuth App 以取得 client ID 與 secret。

認證流程

路由

OAuth 認證需要兩條路由:重新導向與回呼。

儲存並登入使用者

在回呼路由中取得使用者資訊,儲存到資料庫後登入。
使用 updateOrCreate 時,users 資料表需存在 github_id 欄位。可參考後述的 migration 範例。

取得使用者資訊

user() 方法回傳的物件,可透過下列屬性/方法取得使用者資訊。

以 access token 取得使用者

從既有 access token 取得使用者資訊,使用 userFromToken()

無狀態模式

在不使用 Cookie session 的 API 中,可用 stateless() 方法停用 session 狀態驗證。

資料庫整合

Migration

users 資料表加上社群登入用欄位。

以 provider 欄位支援多個 provider

若要一起管理多個 provider,通常會採用 provider / provider_id 兩欄結構。
回呼處理將 provider 名稱動態傳入。

與既有使用者連結

若要將帳號連結到 email 相同的既有使用者,可以 email 搜尋後更新欄位。

Scope 與選項

加入 scope

scopes() 方法指定額外 scope。
使用 setScopes() 方法會覆寫既有 scope。

選項參數

with() 方法在重新導向請求中包含額外參數。
請注意,不要在 with() 傳入 stateresponse_type 等保留關鍵字。

Slack Bot Token

要產生 Slack Bot token,使用 asBotUser()

測試

Socialite 提供測試用的 mock 機制。可在不對實際 provider 發出請求的情況下測試 OAuth 流程。

重新導向的測試

回呼的測試

將 user 實例傳給 fake() 方法,模擬 provider 回傳的使用者資訊。用 User::fake() 產生假的使用者。
預設會設定假的 OAuth token 值。可視需要在 fake() 傳入額外屬性覆寫。
若要模擬 OAuth 1 的使用者,請使用 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 方法。
需實作的 4 個方法職責如下:

2. 於 Service Provider 註冊

AppServiceProviderboot() 方法中以 Socialite::extend() 註冊 driver。

3. 加入設定

4. 與一般 Socialite 相同方式使用

註冊後,即可用與內建 provider 完全相同的 API 使用。
也建議使用以正規方式 (extend()) 擴充 Socialite 的第三方套件。

相關套件

以下是本站作者公開的 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 登入。
最後修改於 2026年8月2日