Symfony onAuthenticationSuccess 没有重定向到正确的页面

问题描述

我已使用 Symfony security 在我的一个网站上设置了安全性。

我的用户只有在完全登录后才能访问网站。 每个用户都可以是客户或管理员。

所以在我的 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 页面,而不是 AdminAccueilClient。我不知道为什么我没有在好的页面上按照我想要的方式重定向。

解决方法

$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'));
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...