如何从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 %> 

它对我有用 – 希望它也适用于其他人。