我有一个Ruby on Rails应用程序。我正在使用Devise进行身份验证。我已经为用户设置了30分钟超时,这会在30分钟的浏览器不活动时自动注销用户。我面临的问题是,当会话在30分钟后注销超时,进入登录界面,浏览器保存的电子邮件地址和密码显示在登录文本框中。但是点击登录按钮,它不会将我登录到应用程序中。登录失败后页面重新加载,我可以像往常一样登录。 当我进一步检查问题时,我发现即使它显示在浏览器屏幕上,电子邮件地址和密码值也是零。
登录表单代码如下:
<%= form_for(resource, :as => resource_name, :url => session_path(resource_name,:role => "super_admin")) do |f| %>
<%= f.email_field :email, :placeholder => "EMAIL", :data => { :'placeholder' => 'EMAIL'}, :class => 'with_holder' %>
<%= f.password_field :password, :placeholder => "PASSWORD", :class => 'disablecopypaste with_holder' , :data => { :'placeholder' => 'PASSWORD'}%>
<% if devise_mapping.rememberable? -%>
<%= f.check_box :remember_me %>
<% end -%>
<a id="save_post" href="javascript:void(0);">LOG IN</a>
<%- if devise_mapping.recoverable? && controller_name != 'passwords' && controller_name != 'registrations' %>
<%= link_to "FORGOT PASSWORD?", new_password_path(resource_name, :role => 'super_admin') %>
<% end -%>
我在这里做错了吗?如果有人可以帮我解决这个问题,那将会非常有帮助
答案 0 :(得分:2)
如果您在重新加载页面时在登录表单上看到电子邮件和密码,则表示浏览器行为,而不是您的设计。这可能是因为您的输入具有自动完成属性,并且您已选择在浏览器上保存密码。尝试在输入上设置autocomplete=off
以查看是否有帮助
答案 1 :(得分:2)
At Last发现问题..问题在于提交表单,表单没有以通常的方式提交。它是从JS方法提交的,它捕获了<a id="save_post" href="javascript:void(0);">LOG IN</a>
的点击事件并提交其父表单的POST操作。
问题是在点击时表单没有被加载,因此它返回了电子邮件和密码字段的空字符串。一旦我改变了以通常的方式提交表单的方法,即放一个表单提交按钮
<%= f.submit "LOG IN", :id => "login_submit" %>
一切正常
由于按钮也是表单内部的一个元素,只有在表单内的其他元素加载后才会加载,因此单击按钮时不会返回空字符串。