如何注销使用自定义设计策略登录的用户

时间:2019-06-07 03:08:00

标签: ruby-on-rails devise logout

我需要使用自定义Devise身份验证策略注销已登录我的Rails应用程序的用户。除database_authenticable策略外,还使用此策略。我需要在我的authenticate_user的自定义实现中添加逻辑吗?自定义策略中的方法?还需要在自定义会话控制器中实现destroy方法吗?

目前,我的自定义策略可以很好地登录用户(目前已进行硬编码),但是由于注销操作调用我的authenticate_user的自定义实现,因此我无法注销用户!再次,他们再次登录。

3 个答案:

答案 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的逻辑,则自定义身份验证可以按预期工作。