Как изменить сообщение об ошибке аутентификации? - PullRequest
1 голос
/ 07 мая 2020

Когда пользователь пытается войти в систему с неправильным именем пользователя / паролем, появляется сообщение об ошибке «Неверные учетные данные»!

Как я могу изменить сообщение об ошибке getLastAuthenticationError()!

Например! вместо «Неверные учетные данные» я хочу, чтобы это было «сообщение об ошибке 123»

Код контроллера:

/**
 * @Route("/login",name="security_login")
 */
public function login(AuthenticationUtils  $authenticationUtils)
{
     // get the login error if there is one
$error = $authenticationUtils->getLastAuthenticationError();


// last username entered by the user
$lastUsername = $authenticationUtils->getLastUsername();

    return $this->render('123/login.html.twig',[
        'lastUsername'=>$lastUsername,
        'error' => $error]);
}

Код security.yaml

security:
    encoders:
        App\Entity\User:
            algorithm: bcrypt

    # https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers
    providers:
        in_memory: { memory: null }
        in_database:
            entity: 
                class: App\Entity\User  
                property: username
    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            anonymous: lazy
            provider: in_database
            form_login: 
                login_path: security_login
                check_path: security_login

            logout:
                path:   security_logout
                target: user_index

код просмотра:

{% if error %}
    <div>{{ error.messageKey|trans(error.messageData, 'security') }}</div>
{% endif %}

<form action="{{ path('security_login') }}" method="post">
    <div class="form-group">
        <input placeholder="username" requied name="_username" value ="{{lastUsername}}"
         type="text" class="form-control">
    </div>
    <div class="form-group">
        <input placeholder="Mode de passe..." requied name="_password"
         type="password" class="form-control">
    </div>
     <div class="form-group">
       <button type="submit" class="btn btn-success">Connexion</button>
    </div>
</form>

1 Ответ

4 голосов
/ 07 мая 2020

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

Для перевода сообщения вы можете посмотреть исходный файл перевода для справки. В папке translations / просто добавьте security.en.yaml, а затем вы можете перезаписать сообщение:

# translations/security.en.yaml
'Invalid credentials.': 'Your username or password are invalid.'

Для исключения CustomUserMessageException проверьте страницу документации на Как создать форму входа . Шаг 3 показывает, как написать GuardAuthenticator, а также показывает, как использовать настраиваемое исключение:

public function getUser($credentials, UserProviderInterface $userProvider)
{
    $token = new CsrfToken('authenticate', $credentials['csrf_token']);
    if (!$this->csrfTokenManager->isTokenValid($token)) {
        throw new InvalidCsrfTokenException();
    }

    $user = $this->entityManager->getRepository(User::class)->findOneBy(['email' => $credentials['email']]);

    if (!$user) {
        // fail authentication with a custom error
        throw new CustomUserMessageAuthenticationException('Email could not be found.');
    }

    return $user;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...