如何在设计中删除单独的登录页面

时间:2013-10-18 03:26:16

标签: ruby-on-rails ruby authentication devise

我使用devise gem在我的rails应用程序中对用户进行身份验证,我决定使用root页面作为登录页面。我资助解决方案,如果登录失败,如何将用户重定向到根URL(下面的代码),但我找不到如何设计,它应该使用root url登录页面而不是单独的登录页面/ users / sign_in < / p>

class CustomFailure < Devise::FailureApp
  def redirect_url
    if warden_options[:scope] == :user
      root_path
    else
      root_path
    end
  end
  def respond
    if http_auth?
      http_auth
    else
      redirect
    end
  end
end

2 个答案:

答案 0 :(得分:2)

如果您希望在标题或其他每个页面中都有登录表单,则必须编写自己的表单。 但是您可以复制普通设计登录表单的代码。

要获取设计视图,您可以在控制台中编写:

rails generate devise:views

然后您可以从app / views / devise / sessions / new.html.erb复制设计登录表单并将其粘贴到视图或部分中。

这可能是这样的:

<%= form_for(User.new, :url => user_session_path) do |f| %>
  <%= f.text_field :email %>
  <%= f.password_field :password %>
  <%= f.check_box :remember_me %>
  <%= f.label :remember_me %>
  <%= f.submit 'Sign in' %>
  <%= link_to "Forgot your password?", new_password_path('user') %>
<% end %>

将变量更改为.new或者您必须在要使用表单的Controller中定义变量是很重要的。在我的例子中,我写了User.new。

有关更多信息,请查看此HowTo: https://github.com/plataformatec/devise/wiki/How-To:-Display-a-custom-sign_in-form-anywhere-in-your-app

答案 1 :(得分:0)

如果您的表单有效,您可能正在寻找有关Devise路线的信息,特别是有关路径的信息:

devise_for :users, :path => '', :controllers => {:sessions => 'sessions', :registrations => 'registrations'}, :path_names => { :sign_in => 'login', :password => 'forgot', :confirmation => 'confirm', :unlock => 'unblock', :registration => 'register', :sign_up => 'new', :sign_out => 'logout'}

更多信息: https://github.com/plataformatec/devise/wiki/How-To:-Change-the-default-sign_in-and-sign_out-routes