是否可以通过Devise强制注销某些用户。
在我的设置中,我使用的是带有Devise 1.5.4的rails 4.1.15。会话在db中保留,并且没有与用户ID的直接映射。是否有一种设计方式可以注销一些不是全部的用户。
我尝试将密码重置为代理,立即注销但不总是。
user_obj.update_attributes(:password => "some_random_string")
答案 0 :(得分:0)
我可以为您提出下一个解决方案。
为名为admin
force_logout:boolean
添加新列
在任何控制器中添加新操作以将force_logout
设置为true
。例:
# in admins_controller.rb
def force_logout
admin = Admin.find(params[:id])
admin.update_column(:force_logout, true)
redirect_to :back
end
如果application_controller.rb
为before_action
force_logout
添加true
以退出用户
before_action :check_force_logout
def check_force_logout
if current_user && current_user.force_logout?
current_user.update_column(:force_logout, false)
sign_out(current_user)
end
end
管理员登录后,您需要重置force_logout
列。通常,您可以session_controller.rb
执行create
。
答案 1 :(得分:0)
是时候挖掘这个了。我能够解决此问题的唯一方法是访问会话。它很慢,但是有效。
def sign_out_different_user
@user = User.find(params[:id])
sessions = ActiveRecord::SessionStore::Session.where("updated_at > ?", Time.now - 480.minutes).all
sessions.each do |s|
if s.data['user_email'] == @user.email
s.delete and return
end
end
end
出于我的需要,我需要更改用户对象的会话到期时间,因此也将其添加到方法中。 YMMV
@user.session_expires_at = Time.now
@user.save