セッションを破棄してコントローラからサインアウトしますか?
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
だから私はカスタムサインアウトルートを作成することでこれを解決することになりました
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
Deviseの組み込み sign_out_and_redirect(current_user)
メソッドを使用しないのはなぜですか?
destroy_user_session_path(@user)
はユーザーのサインアウトパスですが、DELETE
メソッドが必要です。 redirect_to
メソッドは、broswerに別のパスを要求するように指示しますが、broswerはGET
メソッドを使用して要求することができます。
したがって、ユーザーにログアウトを許可する場合は、DELETE
メソッドまたはAJAX request with user logout to redirect_to
関数では使用できません。
ユーザーセッションを破棄するだけの場合は、sign_out @user
を使用してかまいません。
誰かが直接それを使用できない場合に備えて。
<% 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 %>