是否可以通過Devise強制註銷某些用戶?從Rails應用程序爲某些用戶設計強制註銷
在我的設置中,我使用Rails 4.1.15和Devise 1.5.4。會話在數據庫中持久存在,並且沒有與用戶ID直接映射。有沒有一種設計方式來註銷某些用戶而非全部。
我試圖重置密碼作爲代理立即註銷,但並非總是如此。
user_obj.update_attributes(:password => "some_random_string")
是否可以通過Devise強制註銷某些用戶?從Rails應用程序爲某些用戶設計強制註銷
在我的設置中,我使用Rails 4.1.15和Devise 1.5.4。會話在數據庫中持久存在,並且沒有與用戶ID直接映射。有沒有一種設計方式來註銷某些用戶而非全部。
我試圖重置密碼作爲代理立即註銷,但並非總是如此。
user_obj.update_attributes(:password => "some_random_string")
我可以爲您提出下一個解決方案。
添加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
。
上面的解決方案不會立即註銷,它會在用戶下次嘗試登錄時,我不想要。我只想刪除他們當前的活動會話,而不是下次用戶嘗試登錄時的活動會話。我不想刪除將強制註銷字段設置爲true後創建的會話。 – user3173122
不,每個請求都會調用'check_force_logout',並立即註銷。可能需要在sign_out()後添加重定向 –
是的,正如我上面提到的那樣,它會工作。但我想破壞活動會話。即使當真正的登錄嘗試從具有全新會話的不同瀏覽器打開時,上述解決方案也會失敗,因爲該標誌仍設置爲true。我不想等待下一個請求到達。我想在管理員級別執行此操作。 – user3173122
您是否需要在控制器或導軌控制檯中執行此操作? –
在控制器中,例如,管理員將能夠刪除/取消不是他自己的用戶列表的會話?並且會話數據庫中有數百萬條記錄無法迭代,只能爲10個用戶刪除會話。 – user3173122