11

Rails 2.3のライブラリであるDevise 1.0に、ログイン後にroot_urlではなく特定のURLにリダイレクトする方法はありますか?

編集:それがDevise 1.0であることを忘れていました

4

3 に答える 3

21

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
于 2010-10-20T19:20:36.353 に答える
4

Deviseのafter_sign_in_path_forメソッドはあなたが探しているものだと思います。

ApplicationController でそのメソッドを定義すると、Devise のデフォルトの実装がオーバーライドされます。これは、ドキュメントで指定されていることです。

詳細はこちら: http://rdoc.info/github/plataformatec/devise/master/Devise/Controllers/Helpers:after_sign_in_path_for

于 2010-09-03T13:31:38.063 に答える
0

ログイン後にユーザーのダッシュボードを表示するとします。

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 をレンダリングします

于 2012-11-15T13:45:03.810 に答える