Rails 2.3のライブラリであるDevise 1.0に、ログイン後にroot_urlではなく特定のURLにリダイレクトする方法はありますか?
編集:それがDevise 1.0であることを忘れていました
Rails 2.3のライブラリであるDevise 1.0に、ログイン後にroot_urlではなく特定のURLにリダイレクトする方法はありますか?
編集:それがDevise 1.0であることを忘れていました
after_sign_in_pathが呼び出される前に、ユーザーがリダイレクトされている可能性があります。これは、ユーザーが認証によって保護されているページに直接アクセスしようとした場合に発生します。root_path認証によって ('/') が保護されている場合、これは常に発生します。
このトピックに関する Google グループのディスカッションがあります。
手っ取り早い解決策は、次のようstored_location_forに常に戻るnilように上書きすることです。
class ApplicationController < ActionController::Base
...
private
def stored_location_for(resource_or_scope)
nil
end
def after_sign_in_path_for(resource_or_scope)
my_favorite_path
end
end
Deviseのafter_sign_in_path_forメソッドはあなたが探しているものだと思います。
ApplicationController でそのメソッドを定義すると、Devise のデフォルトの実装がオーバーライドされます。これは、ドキュメントで指定されていることです。
ログイン後にユーザーのダッシュボードを表示するとします。
class HomesController < ApplicationController
def index
if current_user //returns nil if not logged in
@users = User.all
render :dashboard
end
end
def dashboard
@users = User.all
end
end
routes.rb で:
root :to => 'homes#index'
ログインすると、index アクションに if-block が入力され、dashboard.erb がレンダリングされます。(if ブロックで、dashboard.erb で必要なすべての変数を必ず初期化してください) そうしないと、rails は index.erb をレンダリングします