我需要注销一个已经使用自定义设备身份验证策略登录到我的Rails应用程序中的用户。除了database_authenticable策略之外,还可以使用此策略。有没有什么逻辑需要添加到authenticate_user的自定义实现中!自定义策略中的方法?另外,我是否需要在自定义会话控制器中实现销毁方法?
目前,我的自定义策略可以很好地登录用户(目前是硬编码的),但我无法注销用户,因为注销操作会调用我的自定义authenticate_user实现!然后他们会再次登录。
发布于 2019-06-07 13:00:36
在这种情况下,您可以使用skip_before_action回调,就像在控制器中一样,将下面的代码放在所有操作之前
skip_before_action :authenticate_user, only: [:your_logout_action]
这将跳过您的方法的身份验证,并且用户将不会再次登录。
发布于 2019-06-07 13:23:42
就我所理解的,就是,让任何动作在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
发布于 2019-06-10 00:55:04
我能够解决我的问题。问题是我硬编码的valid?
方法总是返回true。当我添加了仅当存在电子邮件和密码参数时才返回true的逻辑时,则自定义身份验证按预期工作。
https://stackoverflow.com/questions/56487483
复制相似问题