【问题标题】:Devise current_user = nil in ApplicationController在 ApplicationController 中设计 current_user = nil
【发布时间】:2014-11-30 07:10:35
【问题描述】:

这是完整的错误:

Can't verify CSRF token authenticity
  User Load (0.3ms)  SELECT  `users`.* FROM `users`  WHERE `users`.`id` = 5  ORDER BY `users`.`id` ASC LIMIT 1
   (0.1ms)  BEGIN
   (0.2ms)  COMMIT
Completed 500 Internal Server Error in 22ms

NoMethodError - undefined method `has_role?' for nil:NilClass:
  app/controllers/application_controller.rb:8:in `authenticate_admin_user!'

我可以验证我当时是否以管理员用户身份登录。

这是触发错误的控制器:

class ApplicationController < ActionController::Base
  def authenticate_admin_user!
    unless current_user.has_role? :admin
      flash[:alert] = "This area is restricted to administrators only."
      redirect_to main_app.root_path 
    end
  end

【问题讨论】:

  • 您向您的应用发送了什么请求以及如何发送的?看起来您确实错过了一个 CSRF 令牌。

标签: ruby-on-rails devise


【解决方案1】:

更改
unless current_user.has_role? :admin

致此:
unless current_user.try(:has_role?, :admin)

它的作用是try 调用:has_role? 方法(使用:admin 参数,但它不会引发异常,而是返回nil

【讨论】:

  • 但问题是应该定义current_user
  • 对不起,我之前没遇到过这个问题,看看这个question,它可能会有所帮助
【解决方案2】:

在您的应用程序控制器中添加这一行,以便定义 current_user 方法

before_action :authenticate_user!

【讨论】:

  • 是的,解决了这个问题.. 但不幸的是,现在我看到无法验证 CSRF 令牌的真实性
  • 抱歉,我之前没遇到过这个问题,你可以看看这个question 可能会有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-27
  • 2016-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-01
  • 1970-01-01
相关资源
最近更新 更多