【问题标题】:Configuring routes in devise when only using omniauth for authentication仅使用omniauth进行身份验证时在设计中配置路由
【发布时间】:2011-12-21 21:55:26
【问题描述】:

我已经构建了一个应用程序,它允许用户使用omniauth-ldap 对Active Directory 进行身份验证。如果这是一个新用户,成功的身份验证会根据 AD 返回的信息为他们创建一个用户。如果用户已经存在,则只需登录即可。用户无需注册应用程序,只需使用 AD 凭据登录。而且我从不希望用户使用数据库凭据登录。

我不知道如何摆脱或改变一些路线。例如,如果用户访问 /sign_in,他们将获得数据库身份验证。如果用户访问 sign_up,他们将被带到一个页面以注册该站点。我希望访问 /sign_in 的用户被带到 /users/auth/ldap 的 LDAP 登录。我想我需要制作一个自定义路由,但我不确定我需要将用户引导到哪个控制器。我想让注册页面完全消失。

现在我有一个允许用户使用 ldap 登录的链接,其路径是 user_omniauth_authorize_path(:ldap)。我只是不确定如何将其转换为我的 config/routes.rb 文件可以理解的内容。这就是我现在的路线。

   devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }  do  
      get 'sign_in', :to => 'devise/sessions#new', :as => :new_user_session
      get 'sign_out', :to => 'devise/sessions#destroy', :as => :destroy_user_session
  end 

当我运行 rake 路由时,我看不到 user_omniauth_authorize_path 的任何路由,我认为这是因为该路由是由设计生成的。所以我想我需要让我的路线指向一个设计控制器,但我似乎找不到正确的路径。

【问题讨论】:

  • 您需要更改 devise/sessions/new.html.erb 以使其不显示登录表单。如果你删除database_authenticatable,你最终会在你的应用程序中没有会话路由,这在某种程度上是令人沮丧的。顺便说一句,我刚刚做了:devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" } 在我的 routes.rb 文件中。和 User.rb 模型文件中的 devise :database_authenticatable, :omniauthable, :recoverable, :rememberable, :trackable, :validatable。此外,您需要相应地创建一个 Users::OmniauthCallbacksController。如果您需要代码方面的帮助,请告诉我?

标签: ruby-on-rails ruby-on-rails-3 devise routes omniauth


【解决方案1】:

尝试添加

:skip => [:sessions, :registrations] to your routes.rb

类似这样的:

devise_for :users, :skip => [:sessions, :registrations]

This How To article 可能会有所帮助,这里还有one more link to go through

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    相关资源
    最近更新 更多