这是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。有关详细信息,请参见许可。