我需要使用自定义Devise身份验证策略注销已登录我的Rails应用程序的用户。除database_authenticable策略外,还使用此策略。我需要在我的authenticate_user的自定义实现中添加逻辑吗?自定义策略中的方法?还需要在自定义会话控制器中实现destroy方法吗?
目前,我的自定义策略可以很好地登录用户(目前已进行硬编码),但是由于注销操作调用我的authenticate_user的自定义实现,因此我无法注销用户!再次,他们再次登录。
答案 0 :(得分:0)
在这种情况下,您可以使用skip_before_action回调,例如在您的控制器中,将代码置于所有动作之前的代码下
skip_before_action :authenticate_user, only: [:your_logout_action]
这将跳过您方法的身份验证,并且用户不会再次登录。
答案 1 :(得分:0)
据我所正确理解的是,请对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
答案 2 :(得分:0)
我能够解决我的问题。问题是我有硬编码的valid?
方法来始终返回true。当我添加仅当存在电子邮件和密码参数时才返回true的逻辑,则自定义身份验证可以按预期工作。