【发布时间】: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