设计销毁会话并从控制器注销?
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"
但我明确设置方法::在示例2中删除。也许设计有一个方法? current_user.sign_out
并尝试过sign_out(current_user)哪个也行不通?谢谢你的帮助。
rake routes:
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
答案 0 :(得分:12)
为什么不使用devise的内置sign_out_and_redirect(current_user)
方法?
答案 1 :(得分:7)
所以我最终通过创建自定义注销路径解决了这个问题
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
答案 2 :(得分:6)
destroy_user_session_path(@user)
是用户的退出路径,但必须使用DELETE
方法。 redirect_to
方法会告诉broswer请求其他路径,但broswer可以使用GET
方法请求。
因此,如果您想让用户退出,您必须使用DELETE
方法或使用AJAX请求设置退出表单,以便用户退出但不能使用redirect_to
功能。
如果您只想销毁用户会话,请使用sign_out @user
即可。
答案 3 :(得分:2)
以防万一有人无法直接使用它。
<% 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 %>