2017-12-16 20 views
0

Ruby on Rails、Deviseを認証に使用。私は、Deviseがすぐに使える深いリンクを含んでいると理解していますが、ユーザーは最初に認証が必要なURLに移動する必要があります。クエリ文字列パラメータとしてのDevitsログインの戻りURLを指定

このユースケースは私のニーズを満たしておらず、ログイン後にユーザーが現在のページにリダイレクトされるようにクエリ文字列パラメータを指定するオプションがあるかどうかは疑問です。ページは必要ですが、必須ではありません。

答えて

1

お客様のニーズに合わせてDevise::SessionsControllerを延長することができます。あなたはsource codeを見れば、工夫をすることに成功記号の後、特定のパスにユーザーをリダイレクトするようにafter_sign_in_path_forを使用しています。

あなたが持っているリソースは、あなたのroutes.rbUser

であると仮定すると、使用すべきルータ工夫指定します:

devise_for :users, controllers: {sessions: 'sessions'} 

そしてDevise::SessionsControllerから継承app/controllers/sessions_controllerのコントローラを作成し、after_sign_in_path_forオーバーライド:

class SessionsController < Devise::SessionsController 

    protected 

    def after_sign_in_path_for(resource)   
    params[:redirect_path].presence || stored_location_for(resource) 
    end 
end 
新しいセッションフォーム( app/views/devise/sessions/new.html.erb)で

は、コントローラにredirect_pathのparamを中継隠されたタグを追加します。

<%= hidden_field_tag :redirect_path, params[:redirect_path].presence %> 

今のユーザーの訪問new_user_session_path(redirect_path: some_path)が、それらは後に所望のパスにリダイレクトする必要がある場合成功したログイン。

関連する問題