[英]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
相同!
我不喜欢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.