Hello, 我是 Weber,一位工程師,斜槓鼓手與行銷顧問。
今天是每日一套件的第 20 天,繼續跟著我一起認識 Rails 開發好用的 30 個套件,建立出自己的常用套件庫吧!
第 20 天啦!今天來講一個非常實用的套件,因為 Devise 的關係,也間接認識它。但我先前一直錯誤的理解他是第三方登入的套件,雖然也不算錯啦!
但嚴格說起來,應該是一個授權驗證庫比較正確,而它整合第三方身份驗證和授權登錄的過程。讓使用者可以採用他們的社群媒體帳號來登入,如 Facebook、Twitter、Google 等其他身份驗證提供者 (provider)(如OAuth、OpenID)進行授權,Omniauth 都為這些提供了簡易的解決方案。
Omniauth 的原理是通過提供一個統一的接口,讓你可以輕鬆地整合不同的第三方身份驗證服務,不需要每一個 provider 都從頭開始身份驗證。Omniauth 會處理驗證流程,然後將驗證資料回傳給你的應用程式。
首先要先安裝 omniauth,除了這個之外,還要安裝一個 想要整合的第三方驗證,如下:
(另外,Devise 也有內建,詳見 Day 18)
gem 'omniauth'
gem 'omniauth-<provider>'
這裡的 是你想要整合的第三方身份驗證提供者,比方說 "omniauth-facebook"、"omniauth-twitter"、"omniauth-google-oauth2" 等等。
記得 bundle install~
接著你需要設定 Omniauth,通常在 config/initializers/omniauth.rb
裡。
如下範例:
Rails.application.config.middleware.use OmniAuth::Builder do
provider :<provider>, '<api_key>', '<api_secret>'
end
一樣的, 是你想要整合的第三方提供者,<api_key> 和 <api_secret> 是你該提供者獲得的金鑰和密碼。
完成設定後,你就可以在 controller 中使用 Omniauth 來處理身份驗證了。
以下是一個簡單的例子,假設你想使用 Facebook 登錄:
class SessionsController < ApplicationController
def create
auth = request.env['omniauth.auth']
# 可以在這裡處理授權成功後的邏輯
end
def failure
# 可以在這裡處理授權失敗後的邏輯
end
end
request.env['omniauth.auth']
.env 有沒有很面熟,請詳閱 Day 6
大概就這樣囉,我們明天見!
有問題歡迎隨時留言~