* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Http\Authenticator; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Exception\AuthenticationException; use Symfony\Component\Security\Http\Authenticator\Passport\Passport; /** * The interface for all authenticators. * * @author Ryan Weaver * @author Amaury Leroux de Lens * @author Wouter de Jong */ interface AuthenticatorInterface { /** * Does the authenticator support the given Request? * * If this returns true, authenticate() will be called. If false, the authenticator will be skipped. * * Returning null means authenticate() can be called lazily when accessing the token storage. */ public function supports(Request $request): ?bool; /** * Create a passport for the current request. * * The passport contains the user, credentials and any additional information * that has to be checked by the Symfony Security system. For example, a login * form authenticator will probably return a passport containing the user, the * presented password and the CSRF token value. * * You may throw any AuthenticationException in this method in case of error (e.g. * a UserNotFoundException when the user cannot be found). * * @throws AuthenticationException */ public function authenticate(Request $request): Passport; /** * Create an authenticated token for the given user. * * If you don't care about which token class is used or don't really * understand what a "token" is, you can skip this method by extending * the AbstractAuthenticator class from your authenticator. * * @see AbstractAuthenticator * * @param Passport $passport The passport returned from authenticate() */ public function createToken(Passport $passport, string $firewallName): TokenInterface; /** * Called when authentication executed and was successful! * * This should return the Response sent back to the user, like a * RedirectResponse to the last page they visited. * * If you return null, the current request will continue, and the user * will be authenticated. This makes sense, for example, with an API. */ public function onAuthenticationSuccess(Request $request, TokenInterface $token, string $firewallName): ?Response; /** * Called when authentication executed, but failed (e.g. wrong username password). * * This should return the Response sent back to the user, like a * RedirectResponse to the login page or a 403 response. * * If you return null, the request will continue, but the user will * not be authenticated. This is probably not what you want to do. */ public function onAuthenticationFailure(Request $request, AuthenticationException $exception): ?Response; }