2016-05-06 7 views
0

私はユーザーがログアウトしようとすると問題に遭遇しています。ユーザーがログアウトボタンをクリックすると、ログアウトされてログインページに移動します。しかし、実際には今起こっているのは、現在のページがそのままであるということです。リフレッシュボタンを押すか、別のページに移動してログイン画面を表示する必要があります。私はuser認証のためにdeviseを使ってrailsアプリを開発しています。

アプリケーションコントローラのafter_sign_out_path_for(resource_or_scope)メソッドをオーバーライドして、ログインページを表示させる別のページにリダイレクトしようとしました。この呼び出しはトリガーされませんでした。

私はセッションコントローラにafter_filterも追加しました。別のページにリダイレクトしようとしました。しかし、これは二重レンダリングエラーを引き起こしました。

私はstackoverflowに時間を費やし、ソリューションを見つけることを試みているが、私はできません。どんな助けもありがとう。

ログアウトリンクコードは、私が「取得」のではなく、同様の削除をサポートするために工夫初期化子を変更した

<%= link_to('Logout', destroy_user_session_path, :method => 'get',:class=>'btn btn-sm btn-default') %> 

です。

アイデア?

編集:registration_controller.rb

class RegistrationsController < Devise::RegistrationsController 
    layout "devise_layout" 
    respond_to :json 
end 

routes.rbを

devise_for :users, :controllers => {sessions: 'sessions', registrations: 'registrations'} 
    scope "/admin" do 
    resources :users 
    end 
+0

registration_controllerとroutes.rbは表示できますか? – pyfl88

+1

また、アプリケーションコントローラ内の 'Devise :: Controllers :: Helpers#stored_location_for'メソッドをオーバーライドして、' nil'を返す必要があります。あなたはそれをしました – sajinmp

+0

はい、私はすでにアプリケーションコントローラのstored_location_forをオーバーライドしようとしました。それは動作しませんでした –

答えて

1

さてさて、いくつかのより多くの周りに掘った後ので、私はこれが私のafter_sign_out_path_for機能がトリガされます使用して、次のヘルパーメソッド

sign_out_and_redirect(current_user) 

を発見し、今私はそれが働いています。

0

あなたがリフレッシュした後、ログイン画面に戻ってリダイレクトするか、他のページに移動し、それは明らかにあなたのログアウト・アクションを示すしている場合すでに実行されています。

これは、ajax呼び出しのようなアクショントリガーのようです。 link_to'data-no-turbolink' => trueをご利用ください。そして、そうでない場合は、コンソールログを更新してください。

+0

私はアプリ全体で別の理由でターボリンクを無効にしましたが、あなたの提案を試しても、その動作は同じです。レールコンソールログ:7:40:36 AM web.1 | [844] 127.0.0.1 - [06/5/2016:07:40:36 -0700] "GET/users/sign_out HTTP/1.1" 204 - 0.0321 –

1

申し訳ありませんが、評判のためにコメントを投稿できません。私はどうなるのか:あなたのget destroy_user_sessionは、そのコントローラ#アクションにし、ユーザーセッションを破壊した後

  • 行くことにつながるコントローラ#アクションで参照するには

    1. 実行すくいルートを、redirect_toのlogin_pathを追加したり、after_sign_out_pathを呼び出します方法。

    あなたは私たちにあなたのセッションコントローラを見せてくれますか?

  • +0

    これは正確な答えではありませんでしたが、私が投稿したものです。 –

    +0

    それはあなたを助けてくれてうれしいです。 :)あなたが同じことをしたいかもしれない他の人々のために見つけた解決策を共有することは良い考えかもしれません。 – Tashows

    0

    メソッド:deleteを追加するだけで完了です。

    関連する問題