我的设计用户是“database_authenticatable”和“token_authenticatable”。我尝试从控制台删除该用户的数据库中的“authentication_token”字段,但他们似乎仍然可以使用他们现有的身份验证令牌。删除用户完全有效,但我不想走那么远。
编辑:为清楚起见。我想使用rails console 来退出用户。即运行rails console
然后运行一些命令。
答案 0 :(得分:16)
Devise提供辅助方法来完成这些工作。
user = User.find(params[:id])
sign_in user
sign_out user
希望这有帮助。
答案 1 :(得分:2)
答案 2 :(得分:0)
如果您使用的是Devise,则可以在 rails控制台中使用以下内容。如果您每个用户帐户只使用一个会话,这对我来说非常适合我的应用程序。我将我的会话存储在redisDB中。
user = User.first
user.update_attributes(unique_session_id: "")
我所要做的就是清除该用户的用户unique_session_id,并且rails会将用户踢出会话。
但对于同一个用户帐户的多个会话,这不起作用。
如果要清除所有用户会话,可以从终端
执行以下操作rake db:sessions:clear
答案 3 :(得分:0)
要通过 Devise 在控制台中以这种方式登录:
$ 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
!
答案 4 :(得分:-1)
我不是sign_out @user
模式的粉丝,因为至少对于我正在使用的设计版本来说,签署当前用户,无论我传递它的参数如何。如果您在数据库中存储会话,则可以执行以下操作:
@user.update_attributes(current_sign_in_token: "")
TBH我不认为这是最好的方法,但这是我在自己的研究中看到的最佳方式。
答案 5 :(得分:-1)
似乎属性令牌保存会话:
user.tokens = nil
user.save
答案 6 :(得分:-2)
在包含必要的模块之后,您可以使用其他人提到的帮助者:
include Devise::Controllers::SignInOut
来源:Module: Devise::Controllers::SignInOut
还有另一个问题,即有人分享了一种不涉及使用Devise助手here的方法。
答案 7 :(得分:-2)
我相信您只需更新password_salt,它就会在下次请求时使用户会话无效。
user = User.first
user.update_column(:password_salt, 'reset')
参考: http://www.jonathanleighton.com/articles/2013/revocable-sessions-with-devise/
答案 8 :(得分:-7)
您可以在views-> layouts-> application.html.erb中创建一个注销链接: -
<= link_to 'Log Out', destroy_user_session_path, method: :delete %>
它对我有用 - 希望它也适用于其他人。