Laravel Socialite
簡介
除了一般基於表單的登入方式之外,在 Laravel 中,還可以通過 Laravel Socialite 來以簡單、方便的方式使用 OAuth Provider 登入。目前 Socialite 支援使用 Facebook、Twitter、LinkedIn、Google、GitHub、GitLab 和 Bitbucket 等服務來進行登入。
Socialite Providers 網站上還提供了由社群維護的其他平台的 Adapter。
安裝
若要開始使用 Socialite,請使用 Composer 套件管理器將 Socialite 套件新增至專案的相依性套件中:
更新 Socialite
將 Telescope 升級到新的主要 (Major) 版本時,請務必仔細閱讀升級指南。
設定
在使用 Socialite 之前,需要新增你的網站要使用的 OAuth Provider 憑證 (Credential)。一般來說,可以在要用來登入的服務的儀表板中建立「開發者應用程式」來取得這些憑證。
請將這些憑證放在專案的 config/services.php 設定檔中,並依照你的專案所要使用的 OAuth Provider,設定 facebook、twitter (OAuth 1.0)、twitter-oauth-2 (OAuth 2.0)、linkedin、google、github、gitlab 或 bitbucket 等相對應的 key:
如果 redirect 選項包含相對路徑,則會為自動解析成完整的 URL。
登入
Routing
要使用 OAuth Provider 來登入使用者,需要兩個 Route:一個用來將使用者重新導向到 OAuth Provider,另一個用來接收登入後 Provider 傳回來的回呼。下面的範例說明如何實作這兩個 Route:
Socialite Facade 上的 redirect 方法負責將使用者重新導向到 OAuth Provider。當使用者同意登入要求後,user 方法會檢查傳入的 Request,並向 OAuth Provider 取得使用者的資訊。
登入與檔案儲存
從 OAuth Provider 取得使用者後,就可以判斷該使用者是否存在我們的網站中,並登入該使用者。如果使用者不存在網站資料庫中,可以在資料庫中建立:
有關各個 OAuth Provider 所提供的使用者資訊,請參考說明文件中有關取得使用者詳細資料的部分。
Access Scope (存取範圍)
在為使用者重新導向前,我們可以使用 scopes 方法來指定這個登入驗證 Request 中要包含的「Scope (範圍)」。此方法會將所指定的 Scopes 與先前指定的所有 Scopes 合併起來:
可以使用 setScopes 方法來複寫登入驗證 Request 上的所有已存在的 Scopes:
可選的參數
有一些 OAuth Provider 還支援在重新導向 Request 上設定其他可選的參數。若要在 Request 中包含任何可選的參數,請呼叫 with 方法並提供一個關聯式陣列:
在使用 with 方法時,請小心不要傳入任何保留字 (Reserved Keywords),如 state 或 response_type 等。
取得使用者詳細資料
使用者被重新導向到我們網站上的登入驗證 Callback Route 後,就可以使用 Socialite 的 user 方法來取得使用者的詳細資料。user 方法回傳的使用者物件提供了多種屬性與方法,我們可以將與該使用者有關的資訊存在資料庫中。
根據所使用的 OAuth Provider 是支援 OAuth 1.0 還是 OAuth 2.0,該物件上所提供的屬性與方法可能會有所不同:
以 Token 來取得使用者詳細資料 (OAuth2)
若你已經擁有使用者的有效 Access Token,就可使用 Socialite 的 userFromToken 方法來取得該使用者的詳細資料:
以 Token 與 Secret 來取得使用者詳細資料 (OAuth1)
若你已經擁有使用者的有效 Token 與 Secret,就可使用 Socialite 的 userFromTokenAndSecret 方法來取得該使用者的詳細資料:
Stateless 的登入驗證
使用 stateless 方法可關閉 Session 狀態驗證。此方法適合用於在不使用 Cookie 的 Stateless API 工作階段中加入社群網站登入。
Twitter OAuth 1.0 Driver 不支援 Stateless 的登入驗證。