Symfony onAuthenticationSuccess не перенаправлял на нужную страницу

Я установил безопасность на одном из своих веб-сайтов с помощью Безопасность Symfony.

Мои пользователи могут получить доступ к веб-сайтам, только если они полностью вошли в систему. Каждый пользователь может быть клиентом или администратором.

Итак, в моем LoginFormAuthenticator я установил перенаправление следующим образом:

    public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
    {

        $user = $token->getUser();
        if ($targetPath = $this->getTargetPath($request->getSession(), $providerKey)) {
            if($user instanceof Employe) {
                return new RedirectResponse($this->urlGenerator->generate('Admin'));
            } else if($user instanceof Client){
                return new RedirectResponse($this->urlGenerator->generate('AccueilClient'));
            }
        }else{
            return new RedirectResponse($this->urlGenerator->generate('app_login'));
        }

    }

А форма входа выглядит так:

<form method="post">
                            <img class="responsive-img"
                                 src="{{ asset('build/assets/images/Logo_resized.[hash8].jpg') }}">

                            {% if error %}
                                <div class="row">

                                    <div class="card red">
                                        <div class="card-content black-text">
                                            <span class="card-content">{{ error.messageKey|trans(error.messageData, 'security') }}</span>
                                        </div>

                                    </div>

                                </div>
                            {% endif %}

                            {% if app.user %}
                                <div class="row">

                                    <div class="card red">
                                        <div class="card-content blue accent-1">
                                            <span class="card-content"> Vous êtes déjà connecté en tant que : {{ app.user.nom }} {{ app.user.prenom }},
                                                <a class="black-text" href="{{ path('redirect') }}">Accéder au site</a></span>
                                        </div>

                                    </div>

                                </div>
                            {% endif %}


                            <label for="inputEmail">Email</label>
                            <input type="email" value="{{ last_username }}" name="email" id="inputEmail"
                                   class="form-control" required autofocus>
                            <label for="inputPassword">Mot de passe</label>
                            <input type="password" name="password" id="inputPassword" class="form-control" required>

                            <input type="hidden" name="_csrf_token"
                                   value="{{ csrf_token('authenticate') }}"
                            >

                            <button class="btn btn-lg btn-primary blue_SPIE" type="submit">
                                Se connecter
                            </button>
                        </form>

Но каждый раз я пытался войти в систему. Меня всегда перенаправляют на страницу app_login, а не на страницу Admin или AccueilClient. Я понятия не имею, почему меня не перенаправляют, как я хочу, на хорошую страницу.


person Newbiedev    schedule 25.01.2021    source источник


Ответы (1)


Условие $targetPath = $this->getTargetPath($request->getSession(), $providerKey) состоит в том, чтобы перенаправить пользователя обратно, если он ранее вызывал ограниченный маршрут. Поэтому пользователь не будет проверяться.

public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
{
    $user = $token->getUser();
    if ($targetPath = $this->getTargetPath($request->getSession(), $providerKey)) {
        return new RedirectResponse($targetPath);
    }

    if ($user instanceof Employe) {
        return new RedirectResponse($this->urlGenerator->generate('Admin'));
    }

    if($user instanceof Client) {
        return new RedirectResponse($this->urlGenerator->generate('AccueilClient'));
    }
        
    return new RedirectResponse($this->urlGenerator->generate('app_login'));
}
person SubCore    schedule 25.01.2021
comment
Спасибо большое теперь понял. Большое спасибо. - person Newbiedev; 26.01.2021