繁体   English   中英

如何从 Rails 控制台注销设计用户?

[英]How can I sign out a devise user from the Rails console?

我的设计用户是“database_authenticable”和“token_authenticable”。 我已经尝试从控制台为该用户删除数据库中的“authentication_token”字段,但他们似乎仍然能够使用现有的身份验证令牌。 删除用户完全有效,但我不想走那么远。

编辑:为了清楚起见。 我想使用 rails控制台注销用户。 即运行rails console ,然后运行一些命令。

Devise 提供了辅助方法来做这些事情:

user = User.find(params[:id])
sign_in user
sign_out user

希望这可以帮助。

如果您使用的是 Devise,您可以在Rails 控制台中使用以下内容。 如果您每个用户帐户仅使用 1 个会话,这对我来说非常适用,就像在我的应用程序中一样。 我将我的会话存储在 redisDB 中。

user = User.first
user.update_attributes(unique_session_id: "")

我所要做的就是为该用户清除我的用户 unique_session_id 并且 rails 将用户踢出会话。

但是对于同一用户帐户的多个会话,这不起作用。

如果要清除所有用户会话,可以从终端执行以下操作

rake db:sessions:clear

要通过设计登录,请在控制台中以这种方式检查:

$ rails console
include Warden::Test::Helpers
def sign_in(resource_or_scope, resource = nil)
  resource ||= resource_or_scope
  scope = Devise::Mapping.find_scope!(resource_or_scope)
  login_as(resource, scope: scope)
end

def sign_out(resource_or_scope)
  scope = Devise::Mapping.find_scope!(resource_or_scope)
  logout(scope)
end

@user = User.find(1)
sign_in @user

然后打开http://127.0.0.1:3000/users/sign_in进行测试,在我的情况下它会绕过这个页面并进入主页! sign_out相同!

在包含必要的模块后,您也许可以使用其他人提到的帮助程序:

include Devise::Controllers::SignInOut

来源: 模块:设计::控制器::SignInOut

还有另一个问题,SO如果有人股不使用设计助手涉及的方法在这里

我不喜欢sign_out @user模式,因为至少对于我正在使用的设计版本,它会注销当前用户,而不管我传递的参数如何。 如果您将会话存储在数据库中,则可以执行以下操作:

@user.update_attributes(current_sign_in_token: "")

TBH 我不认为这是最好的方法,但这是我在自己的研究中看到的最好的方法。

我相信您可以简单地更新 password_salt 并且它会在下一次请求时使用户会话无效。

user = User.first
user.update_column(:password_salt, 'reset')    

参考: http : //www.jonathanleighton.com/articles/2013/revocable-sessions-with-devise/

对于旧设备版本

似乎属性令牌保存会话:

user.tokens = nil
user.save

您可以在 views->layouts->application.html.erb 中创建一个注销链接:-

<= link_to 'Log Out', destroy_user_session_path, method: :delete %>

它对我有用 - 希望对其他人也有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM