登录表单中的 CSRF _token 值刷新

Posted

技术标签:

【中文标题】登录表单中的 CSRF _token 值刷新【英文标题】:CSRF _token value refresh in a login form 【发布时间】:2015-05-20 04:28:33 【问题描述】:

我有一个使用 Ajax 提交的登录表单。在一种特定情况下,用户登录后,我需要使用Auth::logout() 将其注销并显示一个额外的模式框。所有这些都无需重新加载页面即可发生。

当登录模式再次打开并提交时,我得到一个令牌不匹配错误。发生这种情况的原因是因为注销使用Session::flush()。在此之后,_token Session 变量被刷新,而登录表单中的_token 输入保持不变(因为提到的缺少页面重新加载)。

如何刷新登录表单中的 CSRF _token,使其以安全的方式与 Session 中刷新的匹配?

【问题讨论】:

【参考方案1】:

当您通过 ajax 提交登录时,您的服务器可能会发回某种响应以让浏览器知道登录成功。您应该使用此响应发回新的 CSRF 令牌,以便您可以更新表单客户端(使用 javascript)。

要提供更多详细信息(例如,如何更新表单字段),我们需要查看更多代码。

【讨论】:

好的,谢谢您的提示。我最终按照您所写的那样做:我将新令牌作为额外属性传递给我的 JS 脚本并更新 _token 输入值。似乎已经足够了。

以上是关于登录表单中的 CSRF _token 值刷新的主要内容,如果未能解决你的问题,请参考以下文章

刷新时重新提交的django表单

Forbidden (CSRF token missing or incorrect.):

ThinkPHP5.1表单令牌Token失效问题的解决_php实例 - PHP

flutter 自动刷新token

vue登录刷新回到首页的问题

通过 Keycloak 中的 refresh_token 刷新 access_token