這是Omniauth開發部門的文檔。您可以在此處找到最新穩定版本的文檔
Omniauth是一個標準化Web應用程序的多個保護身份驗證的庫。它被創建為強大,靈活,並且盡可能少。任何開發人員都可以為Omniauth創建策略,這些策略可以通過不同的系統來驗證用戶。從Facebook到LDAP的所有事物都創建了Omniauth策略。
為了在您的應用程序中使用OmniaUth,您將需要利用一種或多種策略。這些策略通常以RubyGems的形式單獨發布,您可以在Wiki上看到該項目的社區維護列表。
一種稱為Developer策略包含在Omniauth中,並提供了一種完全不安全的,非生產的策略,該策略直接促使用戶獲取身份驗證信息,然後直接將其傳遞。當您開始開發時,您可以將其用作佔位符,並以後輕鬆地交換其他策略。
每種綜合策略都是機架中間件。這意味著您可以以相同的方式使用其他機架中間件。例如,要在Sinatra應用程序中使用內置開發人員策略,您可能會這樣做:
require 'sinatra'
require 'omniauth'
class MyApplication < Sinatra :: Base
use Rack :: Session :: Cookie
use OmniAuth :: Strategies :: Developer
end由於Omniauth是為多培訓身份驗證而構建的,因此您可能需要留出空間來運行多種策略。為此,內置的OmniAuth::Builder類為您提供了一種簡單的指定多種策略的方法。請注意,以下代碼和單獨使用每個策略作為中間件之間沒有區別。這是一個示例,您可能會在config/initializers/omniauth.rb上放入軌道初始化器中:
Rails . application . config . middleware . use OmniAuth :: Builder do
provider :developer unless Rails . env . production?
provider :twitter , ENV [ 'TWITTER_KEY' ] , ENV [ 'TWITTER_SECRET' ]
end您應該為使用特定初始化要求的每個提供商查看文檔。
Omniauth是一個非常低調的圖書館。它旨在成為一個黑匣子,您可以在需要身份驗證時將應用程序的用戶發送到該應用程序,然後再獲取信息。 Omniauth是故意構建的,不是為了自動與用戶模型相關聯或對您可能要使用的數量數量的身份驗證方法做出假設,或者一旦用戶進行身份驗證,您可能想對數據進行操作。這使得Omniautiautiauds非常靈活。要使用OmniAuth,您只需要將用戶重定向到/auth/:provider ,哪裡:provider是策略的名稱(例如, developer或twitter )。從那裡,Omniauth將接管並通過所選策略來驗證它們的必要步驟。
用戶身份驗證後,您下一步該怎麼辦? Omniauth只是在請求/auth/:provider/callback機架環境中設置一個特殊的哈希名為“身份驗證哈希”。 Hash包含有關用戶的更多信息,就像Omniauth能夠從利用策略中收集的那樣。您應該在應用程序中設置一個與回調URL匹配的端點,然後執行應用程序所需的任何步驟。
環境中的omniauth.auth鍵提供了一個身份驗證哈希,其中包含有關正當身份驗證的用戶的信息,包括獨特的ID,它們剛剛用於身份驗證的策略以及個人詳細信息(例如名稱和電子郵件地址)。有關身份驗證哈希可能包含的內容的深入說明,請參見Auth Hash Schema Wiki頁面。
請注意,Omniauth除了在回調請求上設置某些環境信息之外,沒有執行任何操作。這完全取決於您如何實現應用程序身份驗證流的細節。
omniauth與RACK_CSRF不兼容OOTB。為此,需要將以下代碼添加到應用程序引導代碼:
OmniAuth :: AuthenticityTokenProtection . default_options ( key : "csrf.token" , authenticity_param : "_csrf" ) 首先,添加以下寶石
Gemfile :
gem 'omniauth'
gem "omniauth-rails_csrf_protection"然後將Omniauth插入中間件
config/initializers/omniauth.rb :
Rails . application . config . middleware . use OmniAuth :: Builder do
provider :developer if Rails . env . development?
end將來可以在此處添加其他提供商。接下來,我們使用路線,控制器和登錄視圖將其全部匯總。
config/routes.rb :
get 'auth/:provider/callback' , to : 'sessions#create'
get '/login' , to : 'sessions#new'app/controllers/sessions_controller.rb :
class SessionsController < ApplicationController
def new
render :new
end
def create
user_info = request . env [ 'omniauth.auth' ]
raise user_info # Your own session management should be placed here.
end
endapp/views/sessions/new.html.erb :
<%= form_tag('/auth/developer', method: 'post', data: {turbo: false}) do %>
< button type =' submit ' > Login with Developer </ button >
<% end %>現在,如果您訪問/login並單擊登錄按鈕,則應查看Omniauth開發人員登錄屏幕。提交後,您將返回您的應用程序Sessions#create 。現在,加薪應顯示您可以將其集成到您自己的用戶管理中的所有綜合詳細信息。
如果您想開箱即用,則應考慮通過設計使用Omniauth。請訪問Dease Github頁面以獲取更多信息。
(默認情況下)在Rails應用程序中包含以下中間件(默認情況下)。在與Rails API一起使用OmniAuth時,您需要在以下方式中添加其中一種所需的中間件:
ActionDispatch::Session::CacheStoreActionDispatch::Session::CookieStoreActionDispatch::Session::MemCacheStore添加這些添加的訣竅是,默認情況下,添加時會傳遞session_options (包括會話密鑰),因此您不能僅添加session_store.rb初始化器,添加use ActionDispatch::Session::CookieStore且使會話正常運行。
明確的是:會話可能有效,但是您的會話選項將被忽略(即,會話密鑰將默認為_session_id )。您必須在構建中間件之前(例如application.rb )之前設置相關選項,而不是初始化器(例如Application.RB),然後將它們傳遞給您首選的中間件,例如:
application.rb:
config . session_store :cookie_store , key : '_interslice_session'
config . middleware . use ActionDispatch :: Cookies # Required for all session management
config . middleware . use ActionDispatch :: Session :: CookieStore , config . session_options(謝謝@mltsy)
Omniauth支持可配置的記錄器。默認情況下,Omniauth將登錄到STDOUT ,但您可以使用OmniAuth.config.logger進行配置:
# Rails application example
OmniAuth . config . logger = Rails . logger origin URL參數通常用於告知用戶來自何處以及您應該選擇使用它,他們想返回。 Omniauth支持以下可以在提供商級別配置的設置:
預設:
provider :twitter , ENV [ 'KEY' ] , ENV [ 'SECRET' ]
POST /auth/twitter /?o rigin = [ URL ]
# If the `origin` parameter is blank, `omniauth.origin` is set to HTTP_REFERER使用不同命名的原始參數:
provider :twitter , ENV [ 'KEY' ] , ENV [ 'SECRET' ] , origin_param : 'return_to'
POST /auth/twitter /?r eturn_to = [ URL ]
# If the `return_to` parameter is blank, `omniauth.origin` is set to HTTP_REFERER禁用:
provider :twitter , ENV [ 'KEY' ] , ENV [ 'SECRET' ] , origin_param : false
POST /auth/twitter
# This means the origin should be handled by your own application.
# Note that `omniauth.origin` will always be blank. Omniauth Wiki積極維護了Omniauth的深入文檔。如果您想知道對Omniauth,其工作原理以及如何使用它,這應該是您的第一站。
作為Tidelift訂閱的一部分可用。
Omniauth的維護者和其他成千上萬的軟件包正在與Tidelift合作,為您用於構建應用程序的開源軟件包提供商業支持和維護。節省時間,降低風險並改善代碼健康,同時支付您使用的確切軟件包的維護者。了解更多。
Omniauth在2.5、2.6、2.7、3.0、3.1、3.2下進行測試,Truffleruby和Jruby。
該庫旨在遵守語義版本2.0.0。違反該計劃的行為應報告為錯誤。具體而言,如果釋放了向後兼容的次要版本或補丁版本,則應立即將該版本劃定和/或新版本應立即釋放以恢復兼容性。只有新的主要版本才能引入對公共API的破壞更改。由於此策略,您可以(並且應該)使用帶有兩個精度數字的悲觀版本約束來指定對此GEM的依賴。例如:
spec.add_dependency 'omniauth', '~> 1.0'
版權所有(C)2010-2017 Michael Bleigh and Intidea,Inc。有關詳細信息,請參見許可。