加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 使用Devise in Rails注销特定用户

发布时间:2020-12-17 03:07:04 所属栏目:百科 来源:网络整理
导读:我有用于用户身份验证的Devise. 我想签出具有特定ID的用户. 在我的控制器中 def exit @user = User.find(5) sign_out(@user) # this line here signs out the current_user end 设计的注销命令,即使我通过@user,它也会注销current_user. 如何从数据库中选择
我有用于用户身份验证的Devise.
我想签出具有特定ID的用户.

在我的控制器中

def exit
    @user = User.find(5)
    sign_out(@user) # this line here signs out the current_user   
  end

设计的注销命令,即使我通过@user,它也会注销current_user.
如何从数据库中选择用户并使用设计命令将其注销?

解决方法

我假设这是一些管理模块的一部分,你想要签署一个特定的用户.

但是,这并不容易解决.是否登录用户存储在会话中.因此,要签出其他用户,您必须有权访问其会话.

注意:afaik sign_out方法仅适用于当前会话,或者可能通过warden(不知道warden足够好)它可以扩展到当前服务器曾经触及的所有会话.但是:如果你使用乘客或某种形式的rails服务器集群(这很常见),afaik这将无效.我有兴趣听到其他说法,但有一些解释:) sign_out使用给定的参数来确定从(afaik)当前会话中退出的范围.

所以我们通常做的是添加一种紧急按钮来注销所有用户:这会破坏所有会话.请注意,这当然只有在使用某些数据库或文档存储支持的会话存储时才有可能.

或者,您可以打开所有会话,并查找正确的会话(针对您的用户),然后销毁这些会话.

要从存储在activerecord中的特定会话中读取数据,可以编写以下内容:

@session = ActiveRecord::Base.connection.select_all( "SELECT * FROM sessions WHERE session_id = '#{sess_id}'" )
Marshal.load(ActiveSupport::Base64.decode64(@session.data))

还有其他方法:

>使用Timeoutable模块,并强制用户超时?>如果您使用Rememberable,您可以执行@ user.forget_me,但我不确定这是否会影响当前会话?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读