2017-02-04 56 views
0

是否可以通過Devise強制註銷某些用戶?從Rails應用程序爲某些用戶設計強制註銷

在我的設置中,我使用Rails 4.1.15和Devise 1.5.4。會話在數據庫中持久存在,並且沒有與用戶ID直接映射。有沒有一種設計方式來註銷某些用戶而非全部。

我試圖重置密碼作爲代理立即註銷,但並非總是如此。

user_obj.update_attributes(:password => "some_random_string") 
+0

您是否需要在控制器或導軌控制檯中執行此操作? –

+0

在控制器中,例如,管理員將能夠刪除/取消不是他自己的用戶列表的會話?並且會話數據庫中有數百萬條記錄無法迭代,只能爲10個用戶刪除會話。 – user3173122

回答

0

我可以爲您提出下一個解決方案。

添加admin新列名爲force_logout:boolean

在任何你的控制器中添加一個新的動作設定force_logouttrue。例:

# 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_logouttrue

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

+0

上面的解決方案不會立即註銷,它會在用戶下次嘗試登錄時,我不想要。我只想刪除他們當前的活動會話,而不是下次用戶嘗試登錄時的活動會話。我不想刪除將強制註銷字段設置爲true後創建的會話。 – user3173122

+0

不,每個請求都會調用'check_force_logout',並立即註銷。可能需要在sign_out()後添加重定向 –

+0

是的,正如我上面提到的那樣,它會工作。但我想破壞活動會話。即使當真正的登錄嘗試從具有全新會話的不同瀏覽器打開時,上述解決方案也會失敗,因爲該標誌仍設置爲true。我不想等待下一個請求到達。我想在管理員級別執行此操作。 – user3173122