0
我想實現一個自定義的邏輯爲我的用戶實施AdvancedUserInterface抓AccountStatusException
我想允許啓用非用戶訪問某些區域(如該帳戶區,在那裏他們可以,如果改變他們的電子郵件他們犯了一個錯誤)。
根據文檔:
如果有任何在這個接口中的方法返回false,認證 將失敗。
如果您需要爲這些情況執行自定義邏輯,那麼您需要註冊一個異常監聽器,並觀察在每種情況下拋出的特定異常實例。所有的例外是AccountStatusException的 子
所以,我想通過調整this cookbook article到安全事件來創建一個監聽器:
<?php
namespace Acme\DemoBundle\Listener;
use Symfony\Component\Security\Core\SecurityContextInterface;
use Symfony\Component\Security\Core\Exception\AccountStatusException;
class NecdocPatientExceptionListener
{
public function onKernelException($event)
{
// Handle event code goes here
}
}
而且我已經把它添加到包的的services.xml:
services:
kernel.listener.acme_user_exception_listener:
class: Acme\DemoBundle\Listener\AcmeExceptionListener
tags:
- { name: kernel.event_listener, event: security.authentication.success, method: onKernelException }
這捕獲AuthenticationFailureEvent(該onKernelException被稱爲),但不AccountStatusException(不調用onKernelException)
我一直在尋找安全組件代碼,並且似乎捕獲的異常沒有觸發任何事件。 有沒有辦法來捕捉這些例外嗎?
如果'onKernelException($ event)'函數請添加主體。這個事件監聽器現在不會做任何事情。 –
問題是從不調用onKernelException方法。在這種情況下添加一個主體不會做任何事情。 – Julien
我改變了我的策略,並使用角色訪問而不是實現AdvancedUserInterface,因爲實現看起來像不發送事件... – Julien