Safari实际上是用我的电子邮件地址覆盖一个HIDDEN表单字段,该字段应该代表密码重置令牌(ID为user_reset_password_token
,名称为user[reset_password_token]
)。
可以想象,当令牌不正确时,重置密码不起作用,所以我遇到了问题。
我已经确认,如果我在Safari中禁用自动填充功能,或者使用Safari以外的任何浏览器,它的工作正常。
有没有人能解决这个问题?
答案 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)
在输入上设置readonly
和autocomplete=off
属性在iOS的Safari中不起作用。我们必须在表单中添加一个onSubmit
回调,以正确的值替换该值。这很丑,但它修复了该错误。