web-dev-qa-db-ja.com

破壊セッションを考案し、コントローラーからサインアウトする方法は?

セッションを破棄してコントローラからサインアウトしますか?

if something_is_not_kosher
  # 1. log this event, 2. send notice
  redirect_to destroy_user_session_path and return
end

また試しました:

if something_is_not_kosher
 # 1. log this event, 2. send notice
  redirect_to controller: 'devise/sessions', action: 'destroy', method: :delete and return
end

エラーはNo route matches [GET] "/users/sign_out"しかし、私はメソッドを明示的に設定しています::deleteの例2。 current_user.sign_outと動作しないsign_out(current_user)を試しましたか?助けてくれてありがとう。

レーキルート:

        new_user_session GET    /users/sign_in(.:format)         devise/sessions#new
            user_session POST   /users/sign_in(.:format)         devise/sessions#create
    destroy_user_session DELETE /users/sign_out(.:format)        devise/sessions#destroy
           user_password POST   /users/password(.:format)        devise/passwords#create
       new_user_password GET    /users/password/new(.:format)    devise/passwords#new
      edit_user_password GET    /users/password/edit(.:format)   devise/passwords#edit
                         PATCH  /users/password(.:format)        devise/passwords#update
                         PUT    /users/password(.:format)        devise/passwords#update
cancel_user_registration GET    /users/cancel(.:format)          users/registrations#cancel
       user_registration POST   /users(.:format)                 users/registrations#create
   new_user_registration GET    /users/sign_up(.:format)         users/registrations#new
  edit_user_registration GET    /users/edit(.:format)            users/registrations#edit
                         PATCH  /users(.:format)                 users/registrations#update
                         PUT    /users(.:format)                 users/registrations#update
                         DELETE /users(.:format)                 users/registrations#destroy
13
fabbb

だから私はカスタムサインアウトルートを作成することでこれを解決することになりました

  devise_scope :user do
    get '/signout', to: 'devise/sessions#destroy', as: :signout
  end

私のコントローラーには次のものがあります:

if something_is_not_kosher
  redirect_to signout_path and return
end
9
fabbb

Deviseの組み込み sign_out_and_redirect(current_user) メソッドを使用しないのはなぜですか?

14
AOG

destroy_user_session_path(@user)はユーザーのサインアウトパスですが、DELETEメソッドが必要です。 redirect_toメソッドは、broswerに別のパスを要求するように指示しますが、broswerはGETメソッドを使用して要求することができます。
したがって、ユーザーにログアウトを許可する場合は、DELETEメソッドまたはAJAX request with user logout to redirect_to関数では使用できません。

ユーザーセッションを破棄するだけの場合は、sign_out @userを使用してかまいません。

6
dddd1919

誰かが直接それを使用できない場合に備えて。

        <% if user_signed_in? %>
        <li><%= link_to "Logout", destroy_user_session_path, :method => :delete %></li>
        <% else %>
        <li><%= link_to "Sign up now!",  new_user_registration_path%></li>
        <% end %>
3
William Hu