2014-01-09 3 views
1

Я сделал дочерний класс, который простирается от DefaultAuthenticationSuccessHandler, чтобы добавить пользовательскую функцию во время процесса аутентификации. Я хочу остановить процесс аутентификации, если критерии не выполнены. Как мне это сделать?Как отменить аутентификацию в AuthenticationSuccessHandler?

public function onAuthenticationSuccess(Request $request, TokenInterface $token) { 
    if(some_condition_applies){ 
     //if success, resume default flow 
     return parent::onAuthenticationSuccess($request, $token); 
    }else{ 
     //how to fail the authentication here? 
    } 
} 
+0

'onAuthenticationSuccess' вызывается ** после ** аутентификация пользователя. Я думаю, вам нужен пользовательский поставщик. –

+0

думаю. После того как я просмотрел провайдер проверки подлинности по умолчанию Symfony, я понял, что это поставщик, который я должен сделать, а не как обработчик успеха. – Tholapz

ответ

2

Аутентификация Основная задача AuthenticationSuccessHandler - сделать что-то ПОСЛЕ того, как пользователь прошел аутентификацию. Другими словами, слишком поздно что-то делать.

Вы можете создать собственный поставщик аутентификации, который обрабатывает всю требуемую логику аутентификации.

http://symfony.com/doc/current/cookbook/security/custom_authentication_provider.html#the-authentication-provider

0

В зависимости от настроек, новые функциональные возможности SimpleFormAuthenticator в Symfony 2.4 может помочь вам: How to Create a Custom Form Password Authenticator

Это, вероятно, только в том случае, если ваш механизм аутентификации имя пользователя/на основе пароля (не OAuth или что-то).

Кроме того, вы можете просто реализовать интерфейс AdvancedUserInterface, а затем вернуть «false» из метода типа «isEnabled», чтобы предотвратить вход в систему (Forbid Inactive Users). Единственным недостатком является то, что у вас есть только доступ к данным в вашем классе User. Если вам нужно что-то сверх этого, вышеупомянутый метод должен работать (но это немного больше работы).

Cheers!

Смежные вопросы