使用 iframe 时 safari 中的 ActionController::InvalidAuthenticityToken 异常
当我在 safari 中从 iframe 发布表单时,它给出了 Invalid Authenticity Token 异常。如果我尝试不使用 iframe,那么效果很好。
为什么会发生这种情况?我该如何解决这个问题?
While I posted a form from iframe in safari, it gives Invalid Authenticity Token exception. If I try without iframe, then it works fine.
Why it is happening? How can I fix this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
真实性令牌是 Rails 用于保护用户免受 CSRF 攻击的一种机制。这是一个很好的解释,取自了解 Rails 真实性令牌
所以基本上,对于任何会修改模型的操作,rails 都希望验证它是否是由您发起的更改。
Rails 通过使用如下 html 标签将该秘密真实性令牌添加到表单中来实现这一点(通过使用
form_for
或form_tag
帮助程序):回到你的问题:我从未使用过 iframe,所以我不确定发生了什么,但是我的猜测是您的 iframe 表单没有传递 authencity_token。如果是这种情况,解决方案很简单,只需添加一个像上面这样的隐藏输入,并使用
form_authenticity_token
方法来设置其值。The authenticity token is a mechanism that rails uses to protect users from CSRF attacks. Here is a good explanation, taken from Understanding the Rails Authenticity Token
So basically, for any action that would modify your model rails wants to verify that it is a change originated by you.
Rails does that (through the use of
form_for
orform_tag
helpers) by adding that secret authenticity token to the form with a html tag like this:<input name="authenticity_token" type="hidden" value="Som3Thin10ngAndUGly">
Back to your problem: I've never worked with iframes so I'm not sure what's happening, but my guess is that your iframe form is not passing the authencity_token. If this is the case the solution is simple, just add a hidden input like the one above and use the
form_authenticity_token
method to set its value.