@bart
Чтобы залогинить пользователя в Symfony 3, нужно следующее:
Вот пример кода:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
// src/AppBundle/Security/LoginManager.php namespace AppBundleSecurity; use SymfonyComponentSecurityCoreAuthenticationTokenUsernamePasswordToken; use SymfonyComponentSecurityCoreUserUserInterface; use SymfonyComponentSecurityCoreUserUserProviderInterface; use SymfonyComponentSecurityGuardTokenGuardTokenInterface; class LoginManager { private $provider; private $tokenStorage; public function __construct(UserProviderInterface $provider, TokenStorage $tokenStorage) { $this->provider = $provider; $this->tokenStorage = $tokenStorage; } public function loginUser(string $username, string $password): void { $user = $this->provider->loadUserByUsername($username); if (!$user instanceof UserInterface) { throw new RuntimeException(sprintf('User with username "%s" not found.', $username)); } if (!$user->isPasswordValid($password)) { throw new RuntimeException('Invalid password.'); } $token = new UsernamePasswordToken($user, $password, 'main', $user->getRoles()); $this->tokenStorage->setToken($token); } } |
1 2 3 4 5 6 7 |
# app/config/services.yml services: AppBundleSecurityLoginManager: arguments: - '@security.user.provider.concrete.in_memory' - '@security.token_storage' |
@bart
Чтобы воспользоваться этим классом для входа пользователя, необходимо использовать его экземпляр в контроллере или сервисе Symfony:
1 2 3 4 5 6
// src/AppBundle/Controller/LoginController.php
namespace AppBundleController;
use AppBundleSecurityLoginManager; use SymfonyBundleFrameworkBundleControllerController; use SymfonyComponentHttpFoundationRequest;
class LoginController extends Controller { public function loginAction(Request $request, LoginManager $loginManager) { // Получить данные пользователя из запроса $username = $request->request->get('username'); $password = $request->request->get('password');
1 2 3 4 5 6 |
// Залогинить пользователя $loginManager->loginUser($username, $password); // Редирект на главную страницу или другую страницу после входа return $this->redirectToRoute('homepage'); } |
}