浏览器保存的密码在页面加载时不加载

时间:2014-09-10 05:36:48

标签: ruby-on-rails devise

我有一个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 -%>

我在这里做错了吗?如果有人可以帮我解决这个问题,那将会非常有帮助

2 个答案:

答案 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" %>

一切正常

由于按钮也是表单内部的一个元素,只有在表单内的其他元素加载后才会加载,因此单击按钮时不会返回空字符串。