2016-08-25 13 views
0

http://example.comにアクセスすると、最初にログインページが表示され、ログインに成功した後、ホームページに移動します。 http://example.com/myusersにアクセスすると、ログインに成功した後、ホームページではなくmyusersページにリダイレクトします。Rails Devise:サインイン後にユーザーをリダイレクトする方法

いくつかのオンライン投稿を読んだあと、私は自分のapplication_controller.rbでafter_sign_in_path_forメソッドを操作できることを理解しました。私はこのメソッドに特定のURLを追加することでこれをテストし、成功したログイン後にそのURLに常にリダイレクトされます。

def after_sign_in_path_for(resource) 
    "http://example.com/users"  
end 

このメソッドは、ログインする前にユーザーが要求したURLを取得し、それに応じてユーザーをリダイレクトできますか?

答えて

2

考案は、このアウトオブボックスのようなものが付属しています。障害シナリオの一部として、最後の要求を格納します。この「ハウツー」は、ソリューションに役立ちます。あなたは、コントローラ(複数可)のごbefore_filterでこのメソッドを呼び出す必要があることに注意してください:共有のため

before_filter: authenticate_user! 

https://github.com/plataformatec/devise/wiki/How-To:-Redirect-back-to-current-page-after-sign-in,-sign-out,-sign-up,-update#a-simpler-solution

+0

感謝を!念願がこれを既にしたことを知らなかった。驚くばかり! – codyeatworld

+0

"How-To" -Sectionは実際にはかなり良いです。素晴らしいものや例がたくさんあります。 – Mathias

1

要求されたURLをセッション変数に格納できます。

session[:return_to] = request.original_url 

あなたは、アプリケーションのコントローラでbefore_action :authorize方法の内部セッション変数を設定することができ、これはあなたの承認戦略に応じて、どこか別の意味を行うことができます。

def authorize 
    if current_user_authorized? 
    # Authorized... 
    else 
    # Record the requested page URL and redirect to the login page. 
    session[:return_to] = request.original_url 
    redirect_to login_url, error: "Not authorized." 
    end 
end 

あなたが書くことができ、それを使用するには:

def after_sign_in_path_for(resource) 
    session[:return_to] || root_url 
end 
関連する問題