警告:无法使用设计验证 CSRF 令牌的真实性

Posted

技术标签:

【中文标题】警告:无法使用设计验证 CSRF 令牌的真实性【英文标题】:WARNING: Can't verify CSRF token authenticity using devise 【发布时间】:2013-06-16 23:35:59 【问题描述】:

使用 devise 进行日志记录时,我收到警告:无法验证 CSRF 令牌的真实性和 401 未经授权的消息。即使是有效用户,它也会重定向回登录页面。

我尝试了很多解决方案,但仍然无法找出问题所在。 我检查了我的参数,它正在发送应该引发警告的 authencity 令牌:无法验证 CSRF 令牌真实性问题。

这是我的日志文件

Started POST "/admin/sign_in" for 127.0.0.1 at 2013-06-20 13:12:27 +0545
Processing by Devise::SessionsController#create as html
Parameters: "utf8"=>"✓", "authenticity_token"=>"YWAa7xOf+u0ButjnaE/kz5RmL3SZKFs
x51pFbMxDqiw=", "admin"=>"email"=>"shobhab@gmail.com", "password"=>"[FILTERED]"

WARNING: Can't verify CSRF token authenticity

Admin Load (0.7ms)  SELECT `admins`.* FROM `admins` WHERE `admins`.`email` = 'shobhab@gm                          ail.com' LIMIT 1
(0.3ms)  BEGIN
(0.6ms)  UPDATE `admins` SET `last_sign_in_at` = '2013-06-20 07:27:20', `current_sign_i                          n_at` = '2013-06-20 07:27:28', `sign_in_count` = 37, `updated_at` = '2013-06-20 07:27:28' WHERE `admins`.`id` =      4
(19.0ms)  COMMIT
Redirected to home page
Completed 302 Found in 179ms (ActiveRecord: 0.0ms)
Started GET "/" for 127.0.0.1 at 2013-06-20 13:12:28 +0545
Processing by Admin::DashboardController#index as HTML
Completed 401 Unauthorized in 1ms

提前致谢

是devise生成的表格

<%= form_for(resource, :as => resource_name, :url => session_path(resource_name), :html => :id => "login_    form") do |f| %>
     <h2>Log in to your account:</h2>
     <%= f.label :email, 'Email:' %>
     <%= f.text_field :email, :class => "login" %><br /><br />
    <%= f.label :password, 'Password:' %>
    <%= f.password_field :password, :class => "login" %><br /><br />
    <div class="pagination-right">
  <%= f.submit "sign in"%>
    <%= link_to "Forgot Password?", new_admin_password_path %>
    </div>
    <p class="hr">Don't have an account?</p>
    <p>Please contact your Admin or contact Talintel Support</p>
    <% end %>

在隐藏字段中生成真实性令牌

<div style="margin:0;padding:0;display:inline">
<input type="hidden" value="✓" name="utf8">
<input type="hidden" value="6yM4gkyWC94ej1X2Wzn/l17xTpIymsx9wCEuw5aOJbQ=" name="authenticity_token">
</div>

【问题讨论】:

@MichaelSzyndel 我已添加表单 这方面有什么进展吗?我也有同样的问题... 只是环境中的简单配置 @Logic-Seeker 您应该添加配置更改作为问题的答案,以便其他人到达这里时可以从中受益。 能否请您发布您为解决此问题所做的配置更改。我在这里面临类似的问题:***.com/questions/19861402/… 【参考方案1】:

我今天从 2.1 升级到 2.2.8 时遇到了这个问题,并怀疑这个变化 https://github.com/plataformatec/devise/commit/415fa2ad210f37bd264e5653440413dfd90f5170

所以,我在 devise/hooks/csrf_cleaner 中放置了一个断点,以找出调用它的位置。我有一个 before_filter 正在检查 current_user,它根据会话登录用户,因此清除了令牌。

HTH。

【讨论】:

以上是关于警告:无法使用设计验证 CSRF 令牌的真实性的主要内容,如果未能解决你的问题,请参考以下文章

“警告:无法验证 CSRF 令牌真实性”错误 - 带有 Devise 和 :token_authenticable 的 CORS

基本 .ajax 发布到 rails 3.2.2 脚手架,生成“警告:无法验证 CSRF 令牌真实性”

Rails 3:无法验证 CSRF 令牌的真实性

角度注销后无法验证 CSRF 令牌的真实性

无法在 Rails 中验证 CSRF 令牌的真实性

无法验证 CSRF 令牌的真实性 Rails/React