Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 设计验证后添加过滤器_Ruby On Rails_Ruby On Rails 4_Devise - Fatal编程技术网

Ruby on rails 设计验证后添加过滤器

Ruby on rails 设计验证后添加过滤器,ruby-on-rails,ruby-on-rails-4,devise,Ruby On Rails,Ruby On Rails 4,Devise,我需要在应用程序控制器中添加环绕\u操作:设置\u时区(或在\u过滤器:设置\u时区之前)。问题在于,当前用户总是nil,因为设计验证在过滤器之后运行 我想在设计身份验证后运行筛选器,以便访问当前用户并获取时区。 我的代码: class ApplicationController < ActionController::Base around_action :set_time_zone private def set_time_zone current_user.t

我需要在应用程序控制器中添加
环绕\u操作:设置\u时区
(或
在\u过滤器:设置\u时区
之前)。问题在于,
当前用户
总是
nil
,因为设计验证在过滤器之后运行

我想在设计身份验证后运行筛选器,以便访问
当前用户
并获取时区。

我的代码:

class ApplicationController < ActionController::Base
  around_action :set_time_zone

  private

  def set_time_zone
    current_user.time_zone # this raises an expception because current_user is nil
  end
end

class ExampleController < ApplicationController
  before_action :authenticate_user!
end
class ApplicationController
我想保留
身份验证\u用户示例控制器
中编码>并在
应用程序控制器
中保留
设置时区


我也尝试过使用
append\u before\u filter:set\u time\u zone
,但它并没有解决这个问题。

回想一下,Deavise在幕后使用Warden,它为您提供了大量回调。 查看每次用户通过身份验证时(每次会话中第一次)执行的回调:

例:


只需创建一个新的初始值设定项文件并将代码放在那里。(/config/initializers/warden_callbacks.rb)

回想一下,Desive在幕后使用warden,它为您提供了大量回调。 查看每次用户通过身份验证时(每次会话中第一次)执行的回调:

例:


只需创建一个新的初始值设定项文件并将代码放在那里。(/config/initializers/warden_callbacks.rb)

这是一个有用的提示!然而,有时我使用API密钥进行身份验证,所以我不能完全依赖Desive,我需要依赖控制器中的Rails过滤器。哦,我明白了!让我四处看看能找到什么。好问题!这是一个有用的提示!然而,有时我使用API密钥进行身份验证,所以我不能完全依赖Desive,我需要依赖控制器中的Rails过滤器。哦,我明白了!让我四处看看能找到什么。好问题!我在Github上打开了一个问题:我在Github上打开了一个问题:
Warden::Manager.after_authentication do |user,auth,opts|
  user.time_zone
end