我有一個包含用戶信息的用戶表,包括一個'阻止'列。我有一個界面,我可以阻止用戶設置塊列值爲1.現在,當用戶登錄時,通過檢查用戶名和密碼自動在Symfony2中完成,我將它們重定向到一個控制器,該控制器檢查如果用戶被阻止從數據庫中並在會話中設置錯誤消息。 然後我重定向到註銷功能,該功能將用戶註銷並重定向到登錄頁面。現在,問題是,會話在用戶註銷時被破壞,因此我無法通知用戶他已被阻止。如何防止阻止用戶登錄Symfony2?
有關如何以更好的方式實現它的任何建議?
我有一個包含用戶信息的用戶表,包括一個'阻止'列。我有一個界面,我可以阻止用戶設置塊列值爲1.現在,當用戶登錄時,通過檢查用戶名和密碼自動在Symfony2中完成,我將它們重定向到一個控制器,該控制器檢查如果用戶被阻止從數據庫中並在會話中設置錯誤消息。 然後我重定向到註銷功能,該功能將用戶註銷並重定向到登錄頁面。現在,問題是,會話在用戶註銷時被破壞,因此我無法通知用戶他已被阻止。如何防止阻止用戶登錄Symfony2?
有關如何以更好的方式實現它的任何建議?
Symfony爲此功能提供AdvancedUserInterface。它提供了幾種附加方法,如:
public Boolean isAccountNonLocked()
public Boolean isEnabled()
這些方法將在登錄之前調用(在您的用戶實體上)。例如,如果isEnabled
返回false,則用戶將無法登錄。你可以使用這些來實現你的被阻止的用戶。
我知道這些,但不知道它的用法。我將來肯定會實施這些內置方法。謝謝你的幫助! :-) –
根據你的建議,我得到isAccountNonLocked()函數使用isblocked()返回true或false取決於用戶是否被阻止。我的代碼現在更清潔了。再次感謝你的幫助。 :-) –
我很高興能幫到你;) – Syjin
您必須檢查用戶是否在登錄時被阻止。如果用戶被阻止,登錄失敗並顯示「您的被阻止」消息。
如果您阻止登錄的用戶,則必須刷新用戶會話。刷新頁面時,他會自動註銷。
FosUserBundle具有開發這種行爲的特徵。
這是我目前最擔心的問題。我只是想阻止下一次登錄。另外,我不傾向於使用FOS捆綁包。 –
您不應該通知用戶他在登出時被阻止,而是在登錄時被阻止!但是,當您手動將其註銷時,您可以將用戶重定向至不/登錄但/阻止路線 –
如果您閱讀我的問題描述,則不會這樣做。重定向到登錄頁面或任何其他頁面的問題不是一個問題。問題是在使登錄的憑證無效後維護會話消息。 –
好吧,我終於可以做我想做的事情了。 從here獲取靈感後,我設法使用戶憑證無效,然後在重定向之前放置錯誤消息。
你應該檢查之前登錄 – hek2mgl
我明白,但我需要訪問用戶對象,以檢查用戶是否被阻止。 –
如果每個用戶的用戶名都是唯一的, 您可以在用戶在登錄Symfony2時插入用戶名和密碼來檢查用戶是否被阻止 –