0

ユーザーのタイムゾーンを含むログインフォームに隠しフィールドを作成しましたが、そのユーザーセッションに設定したいと思います。認証にdeviseを使用しています。params[:hiddenfieldname] ユーザーをホームページにリダイレクトしているコントローラーで使用する値にアクセスできない場合。不足している手順を教えてください。

4

1 に答える 1

1

決定的な答えを提供するのに十分な情報が質問にあるとは思いません。そうでない場合は、動作していないコードを投稿してください。これが私の推測です...

Devise を使用してログイン (またはログアウト) すると、これらのアクションは Devise::SessionController によって管理されます。ユーザーがログインすると、そのコントローラーの一部がユーザーを場所 (デフォルトではホーム) にリダイレクトし、その時点でparamsアレイがクリアされます。

paramsDevise ログイン プロセスの残りの部分が実行される前に、タイムゾーンの値をセッションに取り込むことができるように、コード内でそのコントローラーの関連するメソッドをオーバーライドする必要があります。何かのようなもの

class DeviseCustom::SessionsController < Devise::SessionsController
  def create
    session[:user_timezone] = params[:hiddenfieldname]
    super
  end
end

このコードはapps/controllers/devise_custom/session_controller.rbプロジェクトに存在します。

routes.rb編集:次のように、新しいコントローラーのカスタム パスを指定するためにも更新する必要があります。

devise_for :users, :controllers => {
  :sessions => "devise_custom/sessions",
}
于 2012-11-19T19:37:12.973 に答える