2013-01-02 52 views
4

我使用Omniauth作为我唯一的身份验证,我的模型上没有:database_authentication。我想通过Atlassian人群登录使用这个宝石:https://github.com/robdimarco/omniauth_crowd如何使用Devise为Omniauth制作自定义登录表单?

该宝石使用标准的Crowd登录表单,我不想要。我想制作一个自定义表单,其行为方式相同,但完全取代了登录页面(没有“用人群登录”)或类似的东西,只是登录到Crowd的表单。

要做到这一点,我在devise.rb添加了这个选项我config.omniauth线:

:form => Devise::SessionsController.actions(:new) 

其中,从我可以在网上看到,将使用该架端点显示自定义表单。我已经改变了HTML在app /视图/设计/会话/ new.html.erb到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形式希望。问题是,当我访问用户/ auth /中的人群,在我devise.rb的:form选项,我得到的错误:使用时

Could not find devise mapping for path "https://stackoverflow.com/users/auth/crowd". 

是否有提供自定义表单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

如何你的路由定义? – Ashitaka

+0

用我的路线编辑。 –

+0

你给你的omniauth控制器起什么名字? '用户:: OmniauthController'?它在名为'users'的文件夹内吗?该控制器中定义的操作是什么? – Ashitaka

回答

0

我完全理解你在做什么。但是有很多原因,我建议你不要这样做。 As

  1. omniauth的基本概念是人们可以相信他们是从他们熟悉的网站登录的。
  2. 如果您删除该页面并添加您自己的页面,那么用户可能会认为您有一些恶意的原因来执行相同的操作。

我没有足够的回购评论,这就是为什么我写了这个作为一个答案

3

我知道这可能是晚了,但我需要做同样的事情,也许这将帮助别人在将来。就我而言,我正在开发一个内部应用程序,需要使用与我们自己的群集服务器上相同的帐户。就我所知,没有任何安全问题,因为我们只是在与我们自己的内部人群服务器交谈。我想要设计登录页面以符合应用程序的美学。

当添加omniauth_crowd宝石,并制定配置之后,你应该有一个看起来像这样的路线:

user_omniauth_authorize GET|POST /users/auth/:provider(.:format) authentication#passthru {:provider=>/crowd/} 

我所要做的就是创建一个自定义设计会议形式,模仿如何默认omn​​iauth_crowd一个作品。基本上它只是发布一个用户名和密码参数到您的服务器。创建自定义设计的观点在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 %> 
+0

非常感谢。我一直在试图用Crowd来做这件事。 – Hut8

相关问题