ruby-on-rails - Rails 中的真实性 token 无效

标签 ruby-on-rails authentication

尝试使用 Devise 登录用户时,我收到无效的真实性 token 错误。

我有 csrf_meta_tags在我的布局中,有一个 authenticity_token存在于请求参数中。正如其他问题的答案所建议的那样,protect_from_forgery with: :exception之前 before_action :authenticate_user! .

如果我注释掉 protect_from_forgery ,我在我的服务器日志中看到以下内容:

Started POST "/users/sign_in" for 127.0.0.1 at 2018-01-19 16:13:46 -0500
Processing by Devise::SessionsController#create as HTML
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"[TOKEN]", "user"=>{"badge_number"=>"0285", "password"=>"[FILTERED]"}, "commit"=>"Log in"}
    User Load (0.3ms)  SELECT  `users`.* FROM `users` WHERE `users`.`badge_number` = '0285' ORDER BY `users`.`id` ASC LIMIT 1
     (0.2ms)  SELECT `divisions`.`id` FROM `divisions` INNER JOIN `divisions_users` ON `divisions`.`id` = `divisions_users`.`division_id` WHERE `divisions_users`.`user_id` = 2
    CACHE  (0.0ms)  SELECT `divisions`.`id` FROM `divisions` INNER JOIN `divisions_users` ON `divisions`.`id` = `divisions_users`.`division_id` WHERE `divisions_users`.`user_id` = 2  [["user_id", 2]]
Redirected to http://localhost:3000/
Completed 302 Found in 141ms (ActiveRecord: 2.1ms)


Started GET "/" for 127.0.0.1 at 2018-01-19 16:13:46 -0500
Processing by IncidentsController#index as HTML
Completed 401 Unauthorized in 0ms (ActiveRecord: 0.0ms)

所以看起来登录正在工作,但是重定向到请求的路径( / )会导致 401 并被重定向到登录页面,就好像登录不起作用一样。

然而,这些都没有真正解释为什么我首先收到真实性 token 错误。

不确定调查问题的下一步可能是什么,因为据我所知,CSRF token 验证所需的所有元素都已到位。

最佳答案

我通过清除本地主机的 cookie 解决了这个问题。

我曾通过本地主机端口使用 SSH 隧道访问生产站点,因此基于冲突 session 和 secret_key_base 的 cookie在本地主机域中。

我通过在 cookie 名称前添加 Rails 环境来防止这种情况再次发生:

Rails.application.config.session_store :cookie_store, key: "_incidents_#{Rails.env}_session"

因此,尽管使用 localhost 来访问我的开发和生产环境,但由于处于不同的环境中,它们会写入不同的 cookie。

关于ruby-on-rails - Rails 中的真实性 token 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48349700/

相关文章:

ruby-on-rails - Nginx SSL 工作但以 http 形式发送请求

ruby-on-rails - 如何创建 Ruby on Rails 应用程序以向聊天移动应用程序发送消息/从聊天移动应用程序发送消息

安卓 : authentication to php server application

authentication - SASL LDAP 身份验证失败

ruby-on-rails - Rails link_to 语法以添加一些内部 html

ruby-on-rails - 如何在 Ubuntu 中释放端口

ruby-on-rails - 如何将我的电子邮件进程/例程放在我的前端服务器之外 (Rails 3.2/devise/sendgrid/heroku)

php - TYPO3:使用构造函数将服务类注入(inject) AuthServiceClass

ruby-on-rails - 如何使用来自服务器(!)的 Koala Gem 更新/延长 Facebook 访问 token ,完全没有用户交互

asp.net-core - ASP.NET Core 3.1 : User. Identity.Name 在 API Controller 中为空,但声明名称存在