Компонент Symfony безопасности делится на две основные части: аутентификацию и авторизацию. Подсистема авторизации проверяет, имеет ли пользователь разрешение на доступ к ресурсу. Эта система связана с ролями и решениями и одновременно мощная и простая в использовании.
Подсистема аутентификации проверяет личность пользователя посредствам любого из поддерживаемых методов: имя пользователя + пароль, сертификаты, маркеры, API и т.д. Это подсистема мощная и гибкая, но много разработчиков Symfony указывают на её сложность.
Новый, связанных с безопасностью компонент, называемый Guard направлен на упрощение подсистемы аутентификации. Это радикально новый подход, основанный на создании только одного PHP класса, который реализует GuardAuthenticatorInterface. Этот интерфейс определяет следующие семь методов:
interface GuardAuthenticatorInterface { /** * Get the authentication credentials from the request. If you return null, * authentication will be skipped. * * For example, for a form login, you might: * * return array( * 'username' => $request->request->get('_username'), * 'password' => $request->request->get('_password'), * ); * * Or for an API token that's on a header, you might use: * * return array('api_key' => $request->headers->get('X-API-TOKEN')); */ public function getCredentials(Request $request); /** * Return a UserInterface object based on the credentials returned by getCredentials() */ public function getUser($credentials, UserProviderInterface $userProvider); /** * Throw an AuthenticationException if the credentials returned by * getCredentials() are invalid. */ public function checkCredentials($credentials, UserInterface $user); /** * Create an authenticated token for the given user. You can skip this * method by extending the AbstractGuardAuthenticator class from your * authenticator. */ public function createAuthenticatedToken(UserInterface $user, $providerKey); /** * Called when authentication executed, but failed (e.g. wrong username password). */ public function onAuthenticationFailure(Request $request, AuthenticationException $exception); /** * Called when authentication executed and was successful (for example a * RedirectResponse to the last page they visited) */ public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey); /** * Does this method support remember me cookies? */ public function supportsRememberMe(); }
После реализации этого интерфейса вы сможете аутентифицировать пользователей через формы ввода пароля, Facebook, Twitter или любого другого OAuth—сервиса, API токенов и т.д. Кроме того, вы легко сможете настроить поведение при успешной или неудачной попытке.
Более полного примера работы с компонентом Guard нет в этой статьи, но вы можете прочитать (и помочь нам закончить) работу в документации компонента или официальном учебнике.
Источник: http://symfony.com/blog/new-in-symfony-2-8-guard-authentication-component