如何从Rails控制台注销设计用户?
我的设计用户是“database_authenticatable”和“token_authenticatable”。 我尝试从控制台删除该用户的数据库中的“authentication_token”字段,但他们似乎仍然可以使用他们现有的身份validation令牌。 删除用户完全有效,但我不想走那么远。
编辑:为清楚起见。 我想使用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
尝试使用sign_out方法:
sign_out @user
设计手册
我不是sign_out @user
模式的粉丝,因为,至少对于我正在使用的设计版本,签署当前用户,无论我传递它的参数。 如果您在数据库中存储会话,则可以执行以下操作:
@user.update_attributes(current_sign_in_token: "")
TBH我不认为这是最好的方式,但这是我在自己的研究中看到的最好的方式。
似乎属性令牌保存会话:
user.tokens = nil user.save
我相信你可以简单地更新password_salt,它将在下次请求时使用户会话无效。
user = User.first user.update_column(:password_salt, 'reset')
参考: http : //www.jonathanleighton.com/articles/2013/revocable-sessions-with-devise/
在包含必要的模块之后,您可以使用其他人提到的帮助程序:
include Devise::Controllers::SignInOut
source: Module:Devise :: Controllers :: SignInOut
还有另一个SO问题,其中某人共享一个不涉及在这里使用Devise助手的方法。
您可以在views-> layouts-> application.html.erb中创建一个注销链接: –
<= link_to 'Log Out', destroy_user_session_path, method: :delete %>
它对我有用 – 希望它也适用于其他人。