Команда make:security:form-login
Команда make:security:form-login создаёт контроллер
формы входа, Twig-шаблон и автоматически настраивает файл
config/packages/security.yaml. После выполнения
команды в проекте появляется готовая страница с полями
_username и _password, а также маршрут
app_login. Команда входит в состав пакета
symfony/maker-bundle.
Синтаксис
php bin/console make:security:form-login
При выполнении команда задаёт интерактивные вопросы: имя контроллера, пространство имён, путь для редиректа после успешного входа и адрес выхода из системы.
Пример
Давайте создадим форму входа в проект:
php bin/console make:security:form-login
В интерактивном режиме ответим на вопросы мастера:
Choose a name for the controller class [SecurityController]: SecurityController
Choose a name for the login route [app_login]: app_login
Choose a URL to redirect to after successful login [/]: /
Do you want to add a logout route? (yes/no) [yes]: yes
Choose a name for the logout route [app_logout]: app_logout
После генерации появится контроллер с методом входа:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
class SecurityController extends AbstractController
{
#[Route(path: '/login', name: 'app_login')]
public function login(AuthenticationUtils $authenticationUtils): Response
{
$error = $authenticationUtils->getLastAuthenticationError();
$lastUsername = $authenticationUtils->getLastUsername();
return $this->render('security/login.html.twig', [
'last_username' => $lastUsername,
'error' => $error,
]);
}
#[Route(path: '/logout', name: 'app_logout')]
public function logout(): void
{
throw new \LogicException('This method can be blank - it will be intercepted by the logout key on your firewall.');
}
}
?>
Также будет создан Twig-шаблон формы входа:
{% extends 'base.html.twig' %}
{% block title %}Log in!{% endblock %}
{% block body %}
<form method="post">
{% if error %}
<div class="alert alert-danger">{{ error.messageKey|trans(error.messageData, 'security') }}</div>
{% endif %}
{% if app.user %}
<div class="mb-3">
You are logged in as {{ app.user.userIdentifier }}, <a href="{{ path('app_logout') }}">Logout</a>
</div>
{% endif %}
<h1 class="h3 mb-3 font-weight-normal">Please sign in</h1>
<label for="username">Username</label>
<input type="text" value="{{ last_username }}" name="_username" id="username" class="form-control" autocomplete="username" required autofocus>
<label for="password">Password</label>
<input type="password" name="_password" id="password" class="form-control" autocomplete="current-password" required>
<input type="hidden" name="_csrf_token" value="{{ csrf_token('authenticate') }}">
<button class="btn btn-lg btn-primary" type="submit">
Sign in
</button>
</form>
{% endblock %}
Результат выполнения команды - готовая страница входа
по адресу /login с полями для логина и пароля.
Пример
Давайте настроим файрвол так, чтобы он использовал форму входа.
Команда make:security:form-login вносит изменения
в файл config/packages/security.yaml автоматически:
security:
password_hashers:
Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface: 'auto'
providers:
users_in_memory: { memory: null }
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
lazy: true
provider: users_in_memory
form_login:
login_path: app_login
check_path: app_login
enable_csrf: true
logout:
path: app_logout
target: /
access_control:
- { path: ^/login, roles: PUBLIC_ACCESS }
- { path: ^/, roles: ROLE_USER }
Теперь любой запрос к корню сайта будет перенаправлять неавторизованного пользователя на страницу входа.
Смотрите также
-
команда
make:user,
которая создаёт класс пользователя для аутентификации -
команда
make:auth,
которая создаёт пустой аутентификатор для своей логики входа -
команда
make:registration-form,
которая создаёт форму регистрации нового пользователя -
команда
make:reset-password,
которая создаёт форму сброса пароля