Symfony onAuthenticationSuccess 没有重定向到正确的页面
Symfony onAuthenticationSuccess did not redirect to the right page
我已经使用 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
页面而不是 Admin
或 AccueilClient
。我不知道为什么我没有在好的页面上按我想要的方式重定向。
$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'));
}
我已经使用 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
页面而不是 Admin
或 AccueilClient
。我不知道为什么我没有在好的页面上按我想要的方式重定向。
$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'));
}