2017-11-28 14 views
1

around_action :set_time_zone(またはbefore_filter :set_time_zone)をアプリケーションコントローラに追加する必要があります。問題は、current_userが常にnilであることです。これは、Devise認証がフィルタの後に実行されるためです。Devise認証後にフィルタを追加する

私はcurrent_userにアクセスしてタイムゾーンを取得できるように、Devise認証後にフィルタを実行したいと思います。

マイコード:

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 

私はExampleControllerauthenticate_user!を維持し、ApplicationControllerset_time_zoneを維持したいと思います。

私もappend_before_filter :set_time_zoneを使ってみましたが、問題は解決しません。

+0

は私がGitHubの上で問題を開いた:これは(https://github.com/rails/rails/issues/31259) – collimarco

答えて

0

Deviseはバックグラウンドでワーデンを使用していますが、いくつかのコールバックが用意されています。ただ、新しい初期化ファイルを作成し、そこにコードを置く

Warden::Manager.after_authentication do |user,auth,opts| 
    user.time_zone 
end 

例: ユーザーが認証されるたびに(各セッションの最初の時間)を実行するafter_authenticationコールバックを見てみましょう。 (/config/initializers/warden_callbacks.rb

+0

[append_before_actionはbefore_action前に実行されます]便利なヒント!しかし、私はAPIキーを認証に使用することがあるので、私はDeviseに完全に頼ることができません。コントローラのRailsフィルタに依存する必要があります。 – collimarco

+0

ああ私は見る!私が何を見つけるか見て回りましょう。素晴らしい質問! – Cyzanfar

関連する問題