2013-04-24 65 views
1

在管理部分,我显示了当前登录用户的列表。 现在管理员可以选择一个或多个用户/用户并销毁他们的会话(注销他们)。 我无法确定从哪里开始,请帮助我。使用devise gem rails注销用户

回答

3

你可以通过在用户对象使用sign_out方法在控制器动作:

# Make sure only admins can do this 
def sign_out_user 
    @user = User.find(params[:id])  
    sign_out @user 
end 

此处了解详情:

http://rubydoc.info/github/plataformatec/devise/master/Devise/TestHelpers%3asign_out

+0

是否有必要使用用户控制器或任何控制器会做? – 2013-04-24 14:58:40

+0

我会为管理员用户创建一个特定的操作。我会更新我的答案。 – AlexBrand 2013-04-24 14:59:54

+0

这将允许您注销特定用户 – AlexBrand 2013-04-24 15:02:30

1

考虑用户是收集你的需要的用户,

for user in users 
    sign_out user 
end 

它应该解决您的问题。

希望它能帮助:)

+0

它注销管理员而不是用户。 – 2013-04-24 19:04:02

+0

您是否验证过“用户”收藏?它可能是,在'用户'集合中发送的管理对象。 – Prem 2013-04-25 03:28:58

+0

我给用户对象sign_out我也试过abort @ user.to_yaml,它是用户数据,但它注销了管理员 – 2013-04-25 05:05:52

0

由设计所提供的sign_out方法也无济于事。我知道文档说它会注销你所要求的“资源”,但如果你自己挖掘这些宝石(设计和监督),你会发现当你给它一个对象,就像用户一样,它只会找出什么该对象所属的作用域(即:user),并将其全部作用域注销。

Devise中的作用域是登录名称空间。您可能有一个需要登录的Customer模型,但也需要一个需要登录的Vendor模型,并且您会为这些模型使用不同的范围。大多数应用程序只使用一个与用户模型绑定的范围。

您可能正在为会话存储使用:cookie_store,这是Rails的默认设置。在这种情况下,除了您自己之外,不可能注销任何单个用户。 Devise会将您的登录信息存储在会话中,该会话存储在Cookie中,而不是存储在数据库中。他们的浏览器有凭据,所以你不能直接删除它。

相关问题