4

我使用 Omniauth 作为我唯一的身份验证,:database_authentication我的模型上没有。我想使用这个 gem 通过 Atlassian Crowd 登录:https ://github.com/robdimarco/omniauth_crowd

该 gem 使用标准的 Crowd 登录表单,这是我不想要的。我想制作一个行为相同的自定义表单,但完全代替登录页面(没有“使用 Crowd 登录”)或类似的东西,只是一个登录 Crowd 的表单。

为此,我config.omniauth在 devise.rb 的行中添加了这个选项:

: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 表单。问题是,当我使用:formdevise.rb 中的选项访问 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

我在这里尝试了几件事,但我尝试过的都没有奏效。

4

2 回答 2

3

我知道这可能会迟到,但我需要做同样的事情,也许这会在未来对其他人有所帮助。就我而言,我正在开发一个内部应用程序,该应用程序需要使用与我们自己的人群服务器上的帐户相同的帐户。据我所知,没有任何安全问题,因为我们只与我们自己的内部人群服务器交谈。我想设置登录页面的样式以匹配应用程序的美感。

添加 omniauth_crowd gem 并使用 Devise 对其进行配置后,您应该有一个如下所示的路由:

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

我所要做的就是创建一个自定义设计会话表单,该表单模仿默认的 omniauth_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 %>
于 2014-06-11T20:58:29.163 回答
0

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

  1. omn​​iauth 的基本概念是人们可以相信他们是从他们熟悉的网站登录的。
  2. 如果您删除该页面并添加您自己的页面,那么用户可能会认为您有一些恶意的理由来做同样的事情。

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

于 2014-01-27T18:05:14.460 回答