我使用Omniauth作为我唯一的身份验证,我的模型上没有:database_authentication
。我想使用此gem登录Atlassian Crowd:https://github.com/robdimarco/omniauth_crowd
该gem使用标准的Crowd登录表单,我不想要。我想制作一个行为相同的自定义表单,但完全取代登录页面(没有“登录Crowd”)或类似的东西,只是一个登录Crowd的表单。
为此,我已将此选项添加到devise.rb中的config.omniauth
行:
:form => Devise::SessionsController.actions(:new)
根据我在网上看到的内容,将使用Rack端点显示自定义表单。我已将app / views / devise / sessions / new.html.erb中的html更改为new.html.haml,其中包含以下格式:
= simple_form_for @user, :url => user_omniauth_authorize_path(:crowd) do |f|
= f.input :username, :input_html => { :name => 'username' }
= f.input :password, :input_html => { :name => 'password' }
= f.button :submit
我希望模仿默认的OmniAuth表单。问题是当我使用devise.rb中的:form
选项访问users / auth / crowd时,我收到错误:
Could not find devise mapping for path "/users/auth/crowd".
使用Devise时,有没有办法为OmniAuth提供这样的自定义表单?
编辑:以下是路线:
devise_for :users, :controllers => { :omniauth_callbacks => 'users/omniauth' } do
get 'login', :to => 'devise/sessions#new', :as => :new_user_session
get 'logout', :to => 'devise/sessions#destroy', :as => :destroy_user_session
end
devise_scope :user do
get '/users/auth/:provider', :to => 'users/omniauth#passthru'
match '/users/auth/failure', :to => 'users/omniauth#failure'
end
resources :users
我在这里尝试了几件事,但我尝试过的任何事情都没有效果。
答案 0 :(得分:3)
我知道这可能会迟到,但我需要做同样的事情,也许这将有助于将来的其他人。就我而言,我正在开发一个内部应用程序,需要使用与我们自己的众包服务器上相同的帐户。由于我们只与自己的内部人群服务器通信,因此我没有任何安全问题。我想设置登录页面的样式以匹配应用程序的美学。
添加omniauth_crowd gem并在使用Devise配置后,您应该有一个如下所示的路径:
user_omniauth_authorize GET|POST /users/auth/:provider(.:format) authentication#passthru {:provider=>/crowd/}
我所要做的就是创建一个自定义设计会话表单,模仿默认的omniauth_crowd工作方式。基本上它只是将用户名和密码param POST到您的服务器。 https://github.com/plataformatec/devise#configuring-views
中描述了创建自定义设计视图我的表单如下:
<%= form_tag user_omniauth_authorize_path(:crowd) do %>
<div><%= label_tag :username, "Username" %><br />
<%= text_field_tag :username %></div>
<div><%= label_tag :password, "Password" %><br />
<%= password_field_tag :password %></div>
<div><%= submit_tag "Sign in" %></div>
<% end %>
答案 1 :(得分:0)
我完全明白你要做什么。但是有很多原因,因此我建议你不要这样做。如