如何注销使用自定义设计策略登录的用户
Posted
技术标签:
【中文标题】如何注销使用自定义设计策略登录的用户【英文标题】:How to logout user logged in with custom devise strategy 【发布时间】:2019-10-22 13:22:51 【问题描述】:我需要注销已使用自定义 Devise 身份验证策略登录到我的 Rails 应用程序的用户。除了 database_authenticable 策略之外,还使用此策略。有没有我需要添加到我的自定义用户实现的逻辑!自定义策略中的方法?我还需要在自定义会话控制器中实现销毁方法吗?
目前我的自定义策略可以很好地登录用户(目前是硬编码),但我无法注销用户,因为注销操作调用了我的自定义实现 authenticate_user!再次,他们再次登录。
【问题讨论】:
【参考方案1】:在这种情况下,您可以使用 skip_before_action 回调,就像在控制器中在所有操作之前放置以下代码一样
skip_before_action :authenticate_user, only: [:your_logout_action]
这将跳过您的方法的身份验证,并且用户不会再次登录。
【讨论】:
【参考方案2】:据我理解正确的是,让logout
和current_user
采取任何行动。如果是这样,那么可以这样实现
比方说,
class SomeController < ApplicationController
before_action :authenticate_user!
def some_action
if some_logic == true #implement some_logic to return boolean(true/false)
sign_out resource
flash[:notice] = ''
flash[:error] = 'You are logged out!'
root_path
end
end
end
【讨论】:
我不认为这一切都是必需的,只是因为我已经实施了自定义策略。如果用户正确注销(这确实是我的问题),如果他们被重定向到需要身份验证的页面(在这种情况下为主页),他们应该被带到登录页面。在这种情况下,我什至需要自定义会话控制器吗?【参考方案3】:我能够解决我的问题。问题是我一直硬编码valid?
方法以返回true。当我添加逻辑以仅在存在电子邮件和密码参数时返回 true 时,自定义身份验证按预期工作。
【讨论】:
【参考方案4】:手动让用户退出。
sign_out(current_user) if current_user.present?
【讨论】:
以上是关于如何注销使用自定义设计策略登录的用户的主要内容,如果未能解决你的问题,请参考以下文章
如何自定义 Grails Spring Security Core 2 登录/注销控制器和视图?