【发布时间】:2018-06-29 04:51:18
【问题描述】:
尝试使用 Devise 登录用户,我收到无效的真实性令牌错误。
我的布局中有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 并被重定向到登录页面,就好像登录不工作一样。
但是,这一切都不能真正解释为什么我首先会收到真实性令牌错误。
不知道下一步调查该问题可能是什么,因为据我所知,CSRF 令牌验证所需的所有元素都已到位。
【问题讨论】:
-
您的配置设置正确吗?这篇文章似乎很相关stackoverflow.com/questions/28060089/…
-
该选项之前不在我的配置中,但添加它并重新启动服务器不会产生任何变化。
标签: ruby-on-rails authentication