我使用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
答案 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