Safari自动填充隐藏的“重置密码令牌”输入

时间:2017-11-21 09:58:48

标签: html ruby-on-rails html5 safari

Safari实际上是用我的电子邮件地址覆盖一个HIDDEN表单字段,该字段应该代表密码重置令牌(ID为user_reset_password_token,名称为user[reset_password_token])。

可以想象,当令牌不正确时,重置密码不起作用,所以我遇到了问题。

我已经确认,如果我在Safari中禁用自动填充功能,或者使用Safari以外的任何浏览器,它的工作正常。

有没有人能解决这个问题?

4 个答案:

答案 0 :(得分:1)

刚刚遇到同样的问题。我通过将readonly属性添加到我的隐藏输入来解决了这个问题,如下所示:

= f.hidden_field :reset_password_token, readonly: true

所以我得到了这个:

<input id="user_reset_password_token" name="user[reset_password_token]" readonly="readonly" type="hidden" value="YXHRuRgppyzxqsdEXiNm">

答案 1 :(得分:0)

没有真正干净的方法可以做到这一点。 一个解决方法是在此之前有一个假输入,以便safari将自动填充它而不是你的输入。 像这样的一些想法:

<input id="fake_password" name="fake_user[password]" style="position:absolute; top:-100px;" type="text" value="Safari Autofill Me">

top-100px此处隐藏此输入,因为display:none在某些情况下无法阻止自动填充......

答案 2 :(得分:0)

禁用隐藏字段的自动填充功能:

HTML:

<input name="reset_password_token" type="hidden" autocomplete="off">

Rails(使用form-helper):

<%= f.hidden_field :reset_password_token, autocomplete: 'off' %>

答案 3 :(得分:0)

在输入上设置readonlyautocomplete=off属性在iOS的Safari中不起作用。我们必须在表单中添加一个onSubmit回调,以正确的值替换该值。这很丑,但它修复了该错误。