4

当我在 safari 中发布 iframe 的表单时,它给出了 Invalid Authenticity Token 异常。如果我尝试不使用 iframe,那么它可以正常工作。

为什么会这样?我怎样才能解决这个问题?

4

1 回答 1

0

真实性令牌是 Rails 用来保护用户免受 CSRF 攻击的一种机制。这是一个很好的解释,取自Understanding the Rails Authenticity Token

当用户查看表单以创建、更新或销毁资源时,rails 应用程序会创建一个随机的authentity_token,将此令牌存储在会话中,并将其放置在表单的隐藏字段中。当用户提交表单时,rails 会查找authentity_token,将其与存储在会话中的进行比较,如果它们匹配,则允许继续请求。

因此,基本上,对于任何会修改您的模型导轨的操作都希望验证它是由您发起的更改。

Rails通过将秘密真实性令牌添加到带有 html 标记的表单中来做到这一点(通过使用form_for或帮助程序),如下所示:form_tag<input name="authenticity_token" type="hidden" value="Som3Thin10ngAndUGly">

回到你的问题:我从来没有使用过 iframe,所以我不确定发生了什么,但我猜你的 iframe 表单没有通过 authencity_token。如果是这种情况,解决方案很简单,只需像上面那样添加一个隐藏输入,然后使用该form_authenticity_token方法设置其值。

于 2011-09-04T09:19:33.043 回答