gpt4 book ai didi

ruby-on-rails - 在另一个选项卡中设计登录/注销后 InvalidAuthenticityToken

转载 作者:行者123 更新时间:2023-12-05 05:24:42 26 4
gpt4 key购买 nike

在不同的选项卡中更改用户身份验证状态时,我遇到了 InvalidAuthenticityToken 异常的一些问题。

我的应用程序非常简单。事实上,这只是我学习的基本学习应用程序。 https://github.com/antonkoh/railsrep/tree/master/lesson17/my_app

它使用 Devise gem 进行身份验证:

 <%= link_to "Sign out", destroy_user_session_path, method: :delete %>

<%= link_to "Sign in", new_user_session_path %>

protect_from_forgery 设置为 :exception 因为它是一个浏览器应用程序,还没有任何 API 相关。

我确实在我的布局中指定了 <%= csrf_meta_tags %>。

该问题以多种不同方式重现。只是几个一般的例子:

  1. 在选项卡 A 上,我打开一个表单,以匿名用户身份添加/编辑帖子。
  2. 在选项卡 B 上,我以任何用户身份登录。
  3. 返回选项卡 A 我尝试添加帖子结果:InvalidAuthenticityToken

  1. 在选项卡 A 上,我以登录用户身份打开帖子列表。
  2. 在选项卡 B 上,我退出。
  3. 返回选项卡 A 我尝试销毁帖子。结果:InvalidAuthenticityToken

我已经介绍了我自己的方法来确保某些登录用户可以执行某些操作,但由于这个异常,我什至没有看到它们在运行。它是否应该以这种方式工作,只是在用户身份验证状态更改后将自己投入来自未刷新页面的任何 PATCH 请求?如果我将伪造保护模式更改为 null_session 或 reset_session,我的应用程序是否会变得不安全?

非常感谢

最佳答案

这是正常的,也是意料之中的。你需要了解What are sessions?

在您的应用中, session 存储在 cookie 中。浏览器选项卡共享 cookie。如果您通过另一个浏览器窗口打开浏览器窗口,也是一样的。

出于安全原因, session should be登录/注销后重置。 Devise 只是在做他的工作。

session 重置后,旧的 CSRF token 将不再有效。这就是为什么当您从旧选项卡提交 POST 请求时,它会引发 InvalidAuthenticityToken。

为了用户体验,您可以在 Controller 中修复 InvalidAuthenticityToken 错误,然后将用户重定向到新页面,或者为用户重新加载页面并显示错误消息。

希望这对您有所帮助。

关于ruby-on-rails - 在另一个选项卡中设计登录/注销后 InvalidAuthenticityToken,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33947750/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com