这段代码是symfony项目的基础和路线的基础,在这个函数onAuthenticationSuccess中,我有以下代码来检查用户是否具有特定角色,然后我尝试将他重定向到正确的路径,但似乎是不起作用,还有其他方法吗?,
然后,我们将使用 make:user 命令创建一个用户类 - 该命令将为安全性创建一个用户类,并且它将自动更新 security.yaml。 :
\`base
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>{% block title %}Welcome!{% endblock %}</title>
<link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 128 128%22><text y=%221.2em%22 font-size=%2296%22>⚫️</text></svg>">
{# Run `composer require symfony/webpack-encore-bundle` to start using Symfony UX #}
{% block stylesheets %}
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KK94CHFLLe+nY2dmCWGMq91rCGa5gtU4mk92HdvYe+M/SXH301p5ILy+dN9+nJOZ" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.css">
{% endblock %}
{% block javascripts %}
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-ENjdO4Dr2bkBIFxQpeoTz1HIcje39Wm4jDKdf19U8gI4ddQ3GYNS7NTKfAdVQSZe" crossorigin="anonymous"></script> {% endblock %}
</head>
<body>
{% block body %}{% endblock %}
</body>
</html>
admin base:
{% extends 'base.html.twig' %}
{% block body %}
\<div class="container"\>
\<div calss="row"\>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="container-fluid">
<a class="navbar-brand" href="{{ path('app_admin')}}">Home</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" aria-current="page" href="{{ path('app_instructeur_new') }}">Add instructeur</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ path('app_mededelingen_new') }}">Add mededelingen</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ path('app_admin_contact') }}">Contant</a>
</li>
</ul>
<ul class="navbar-nav ms-auto">
{% if is_granted('ROLE_ADMIN')%}
<li class="nav-item">
<a class="nav-link " href="{{ path('app_logout') }}">You are logged in as
admin {{app.user.username}}, Uitloggen</a>
</li>
{% endif %}
</ul>
</div>
</div>
</nav>
</div>
<div class="row">
<div class="col-sm-4 d-none d-sm-block">
<div class="card">
<img src="{{ asset('images/Autorijles-banner.jpg')}}" class="card-img-top" alt="..." height="200">
<div class="card-body">
</div>
</div>
</div>
<div class="col-sm-4 d-none d-sm-block">
<div class="card">
<img src="{{ asset('images/Autorijles-banner-2.jpg')}}" class="card-img-top" alt="..." height="200">
<div class="card-body">
</div>
</div>
</div>
<div class="col-sm-4 d-none d-sm-block">
<div class="card">
<img src="{{ asset('images/cars.jpg')}}" class="card-img-top" alt="..." height="200">
<div class="card-body">
</div>
</div>
</div>
</div>
{% block content %}{% endblock %}
<footer class="mt-5 p-3 text-center">
<div class="footer container-fluid bg-dark text-light">
<i class="bi bi-instagram float-end img-thumbnail text-dark"></i>
<i class="bi bi-facebook float-end img-thumbnail text-dark"></i>
<i class="bi bi-youtube float-end img-thumbnail text-dark"></i>
<p class="text-center py-2 mb-0">Copyright © 2023 Designed by
<a href="#" rel="noopener noreferre">@Alkatlabe</a>
</p>
</div>
</footer>
</div>
{% endblock %}
bezoeker base:
{% extends 'base.html.twig' %}
{% block body %}
\<div class="container"\>
\<div calss="row"\>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="container-fluid">
<a class="navbar-brand" href="{{ path('app_bezoeker')}}">Home</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" aria-current="page" href="#">Service</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ path('app_contact')}}">Contact</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ path('app_voorwaarden')}}">Voorwaarden</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ path('app_register')}}">Register</a>
</li>
</ul>
<ul class="navbar-nav ms-auto">
<li class="nav-item">
<a class="nav-link " href="{{ path('app_login') }}">Login</a>
</li>
</ul>
</div>
</div>
</nav>
</div>
<div class="row">
<div class="col-sm-4 d-none d-sm-block">
<div class="card">
<img src="{{ asset('images/Autorijles-banner.jpg')}}" class="card-img-top" alt="..." height="200">
<div class="card-body">
</div>
</div>
</div>
<div class="col-sm-4 d-none d-sm-block">
<div class="card">
<img src="{{ asset('images/Autorijles-banner-2.jpg')}}" class="card-img-top" alt="..." height="200">
<div class="card-body">
</div>
</div>
</div>
<div class="col-sm-4 d-none d-sm-block">
<div class="card">
<img src="{{ asset('images/cars.jpg')}}" class="card-img-top" alt="..." height="200">
<div class="card-body">
</div>
</div>
</div>
</div>
{% block content %}{% endblock %}
<footer class="mt-5 p-3 text-center">
<div class="footer container-fluid bg-dark text-light">
<i class="bi bi-instagram float-end img-thumbnail text-dark"></i>
<i class="bi bi-facebook float-end img-thumbnail text-dark"></i>
<i class="bi bi-youtube float-end img-thumbnail text-dark"></i>
<p class="text-center py-2 mb-0">Copyright © 2023 Designed by
<a href="#" rel="noopener noreferre">@Alkatlabe</a>
</p>
</div>
</footer>
</div>
{% endblock %}
instractur or page
{% extends 'base.html.twig' %}
{% block body %}
\<div class="container"\>
\<div calss="row"\>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="container-fluid">
<a class="navbar-brand" href="{{ path('app_instructeur')}}">Home</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" aria-current="page" href="{{ path('app_rijlessen_index') }}">Rijlessen</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ path('app_ziekmelding_new') }}">Ziek melden</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ path('app_dagrooster') }}">Dagrooster</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ path('app_instructeur_contact') }}">Contact</a>
</li>
</ul>
<ul class="navbar-nav ms-auto">
{% if is_granted('ROLE_INSTRUCTEUR')%}
<li class="nav-item">
<a class="nav-link " href="{{ path('app_logout') }}">You are logged in as
instructeur {{app.user.username}}, Uitloggen</a>
</li>
{% endif %}
</ul>
</div>
</div>
</nav>
</div>
<div class="row">
<div class="col-sm-4 d-none d-sm-block">
<div class="card">
<img src="{{ asset('images/Autorijles-banner.jpg')}}" class="card-img-top" alt="..." height="200">
<div class="card-body">
</div>
</div>
</div>
<div class="col-sm-4 d-none d-sm-block">
<div class="card">
<img src="{{ asset('images/Autorijles-banner-2.jpg')}}" class="card-img-top" alt="..." height="200">
<div class="card-body">
</div>
</div>
</div>
<div class="col-sm-4 d-none d-sm-block">
<div class="card">
<img src="{{ asset('images/cars.jpg')}}" class="card-img-top" alt="..." height="200">
<div class="card-body">
</div>
</div>
</div>
</div>
{% block content %}{% endblock %}
<footer class="mt-5 p-3 text-center">
<div class="footer container-fluid bg-dark text-light">
<i class="bi bi-instagram float-end img-thumbnail text-dark"></i>
<i class="bi bi-facebook float-end img-thumbnail text-dark"></i>
<i class="bi bi-youtube float-end img-thumbnail text-dark"></i>
<p class="text-center py-2 mb-0">Copyright © 2023 Designed by
<a href="#" rel="noopener noreferre">@Alkatlabe</a>
</p>
</div>
</footer>
</div>
{% endblock %}
member user base
{% extends 'base.html.twig' %}
{% block body %}
\<div class="container"\>
\<div calss="row"\>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="container-fluid">
<a class="navbar-brand" href="{{ path('app_member')}}">Home</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" aria-current="page" href="{{ path('app_rijles_member') }}">Rijlessen</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ path('app_member_contact')}}">Contant</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ path('app_user_index', {id: app.user.id})}}">Profile</a>
</li>
</ul>
<ul class="navbar-nav ms-auto">
{% if is_granted('ROLE_MEMBER')%}
<li class="nav-item">
<a class="nav-link " href="{{ path('app_logout') }}">You are logged in as
member {{app.user.username}}, Uitloggen</a>
</li>
{% endif %}
</ul>
</div>
</div>
</nav>
</div>
<div class="row">
<div class="col-sm-4 d-none d-sm-block">
<div class="card">
<img src="{{ asset('images/Autorijles-banner.jpg')}}" class="card-img-top" alt="..." height="200">
<div class="card-body">
</div>
</div>
</div>
<div class="col-sm-4 d-none d-sm-block">
<div class="card">
<img src="{{ asset('images/Autorijles-banner-2.jpg')}}" class="card-img-top" alt="..." height="200">
<div class="card-body">
</div>
</div>
</div>
<div class="col-sm-4 d-none d-sm-block">
<div class="card">
<img src="{{ asset('images/cars.jpg')}}" class="card-img-top" alt="..." height="200">
<div class="card-body">
</div>
</div>
</div>
</div>
{% block content %}{% endblock %}
<footer class="mt-5 p-3 text-center">
<div class="footer container-fluid bg-dark text-light">
<i class="bi bi-instagram float-end img-thumbnail text-dark"></i>
<i class="bi bi-facebook float-end img-thumbnail text-dark"></i>
<i class="bi bi-youtube float-end img-thumbnail text-dark"></i>
<p class="text-center py-2 mb-0">Copyright © 2023 Designed by
<a href="#" rel="noopener noreferre">@Alkatlabe</a>
</p>
</div>
</footer>
</div>
{% endblock %}
controllars:
admin:
<?php
namespace App\Controller;
use App\Entity\Mededelingen;
use App\Entity\User;
use App\Form\MededelingenType;
use App\Form\UserType;
use App\Repository\MededelingenRepository;
use App\Repository\UserRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Annotation\Route;
class AdminController extends AbstractController
{
#[Route('/admin', name: 'app_admin')]
public function index(): Response
{
return $this->render('admin/index.html.twig', [
'controller_name' => 'AdminController',
]);
}
#[Route('admin/contact', name: 'app_admin_contact')]
public function contact(): Response
{
return $this->render('admin/contact.html.twig', [
'controller_name' => 'AdminController',
]);
}
#[Route('admin/instructeur/new', name: 'app_instructeur_new', methods: ['GET', 'POST'])]
public function newInstructeur(Request $request, UserRepository $userRepository, UserPasswordHasherInterface $userPasswordHasher): Response
{
$user = new User();
$form = $this->createForm(UserType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$user->setPassword(
$userPasswordHasher->hashPassword(
$user,
$form->get('password')->getData()
)
);
$user->setRoles(['ROLE_INSTRUCTEUR']);
$userRepository->save($user, true);
return $this->redirectToRoute('app_admin', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('admin/newInstructeur.html.twig', [
'user' => $user,
'form' => $form,
]);
}
#[Route('admin/mededeling/new', name: 'app_mededelingen_new', methods: ['GET', 'POST'])]
public function new(Request $request, MededelingenRepository $mededelingenRepository): Response
{
$mededelingen = new Mededelingen();
$form = $this->createForm(MededelingenType::class, $mededelingen);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$mededelingen->setAdmin($this->getUser());
$mededelingenRepository->save($mededelingen, true);
return $this->redirectToRoute('app_admin', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('admin/newMededeling.html.twig', [
'mededelingen' => $mededelingen,
'form' => $form,
]);
}
}
bezoekres
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class BezoekerController extends AbstractController
{
#[Route('/bezoeker', name: 'app_bezoeker')]
public function index(): Response
{
return $this->render('bezoeker/index.html.twig', [
'controller_name' => 'BezoekerController',
]);
}
#[Route('bezoeker/voorwaarden', name: 'app_voorwaarden')]
public function voorwaarden(): Response
{
return $this->render('bezoeker/voorwaarden.html.twig', [
'controller_name' => 'BezoekerController',
]);
}
#[Route('bezoeker/contact', name: 'app_contact')]
public function contact(): Response
{
return $this->render('bezoeker/contact.html.twig', [
'controller_name' => 'BezoekerController',
]);
}
}
instractur
<?php
namespace App\Controller;
use App\Entity\Rijlessen;
use App\Entity\Ziekmelding;
use App\Form\RijlessenType;
use App\Form\ZiekmeldingType;
use App\Repository\MededelingenRepository;
use App\Repository\RijlessenRepository;
use App\Repository\ZiekmeldingRepository;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class InstructeurController extends AbstractController
{
#[Route('/instructeur', name: 'app_instructeur')]
public function index(MededelingenRepository $mededelingenRepository): Response
{
$mededelingen = $mededelingenRepository->findAll();
return $this->render('instructeur/index.html.twig', [
'controller_name' => 'InstructeurController',
'mededelingen' => $mededelingen
]);
}
#[Route('instructeur/contact', name: 'app_instructeur_contact')]
public function contact(): Response
{
return $this->render('instructeur/contact.html.twig', [
'controller_name' => 'instructeurController',
]);
}
#[Route('instructeur/rijlessen', name: 'app_rijlessen_index', methods: ['GET'])]
public function rijlessen(RijlessenRepository $rijlessenRepository): Response
{
$rijlessens = $this->getUser()->getInstructeurRijles();
return $this->render('instructeur/rijlessen/index.html.twig', [
'rijlessens' => $rijlessens,
]);
}
#[Route('instructeur/dagrooster', name: 'app_dagrooster', methods: ['GET'])]
public function dagrooster(RijlessenRepository $rijlessenRepository): Response
{
$rijlessens = $this->getUser()->getInstructeurRijles();
return $this->render('instructeur/dagrooster.html.twig', [
'rijlessens' => $rijlessens,
]);
}
#[Route('instructeur/rijlessen/new', name: 'app_rijlessen_new', methods: ['GET', 'POST'])]
public function new(Request $request, RijlessenRepository $rijlessenRepository): Response
{
$rijlessen = new Rijlessen();
$form = $this->createForm(RijlessenType::class, $rijlessen);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$rijlessen->setInstructeur($this->getUser());
$rijlessenRepository->save($rijlessen, true);
return $this->redirectToRoute('app_rijlessen_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('instructeur/rijlessen/new.html.twig', [
'rijlessen' => $rijlessen,
'form' => $form,
]);
}
#[Route('instructeur/rijlessen{id}', name: 'app_rijlessen_show', methods: ['GET'])]
public function show(Rijlessen $rijlessen): Response
{
return $this->render('instructeur/rijlessen/show.html.twig', [
'rijlessen' => $rijlessen,
]);
}
#[Route('instructeur/rijlessen/{id}/edit', name: 'app_rijlessen_edit', methods: ['GET', 'POST'])]
public function edit(Request $request, Rijlessen $rijlessen, RijlessenRepository $rijlessenRepository): Response
{
$form = $this->createForm(RijlessenType::class, $rijlessen);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$rijlessenRepository->save($rijlessen, true);
return $this->redirectToRoute('app_rijlessen_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('instructeur/rijlessen/edit.html.twig', [
'rijlessen' => $rijlessen,
'form' => $form,
]);
}
#[Route('instructeur/rijlessen{id}', name: 'app_rijlessen_delete', methods: ['POST'])]
public function delete(Request $request, Rijlessen $rijlessen, RijlessenRepository $rijlessenRepository): Response
{
if ($this->isCsrfTokenValid('delete'.$rijlessen->getId(), $request->request->get('_token'))) {
$rijlessenRepository->remove($rijlessen, true);
}
return $this->redirectToRoute('app_rijlessen_index', [], Response::HTTP_SEE_OTHER);
}
#[Route('instructeur/ziekmelding/new', name: 'app_ziekmelding_new', methods: ['GET', 'POST'])]
public function newZiekmelding(Request $request, ZiekmeldingRepository $ziekmeldingRepository): Response
{
$ziekmelding = new Ziekmelding();
$form = $this->createForm(ZiekmeldingType::class, $ziekmelding);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$ziekmelding->setInstructeur($this->getUser());
$ziekmeldingRepository->save($ziekmelding, true);
return $this->redirectToRoute('app_instructeur', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('instructeur/newZiekmelding.html.twig', [
'ziekmelding' => $ziekmelding,
'form' => $form,
]);
}
}
member:
<?php
namespace App\Controller;
class MemberController extends AbstractController
{
#[Route('/member', name: 'app_member')]
public function index(MededelingenRepository $mededelingenRepository): Response
{
$mededelingen = $mededelingenRepository->findAll();
return $this->render('member/index.html.twig', [
'controller_name' => 'MemberController',
'mededelingen' => $mededelingen
]);
}
#[Route('member/contact', name: 'app_member_contact')]
public function contact(): Response
{
return $this->render('member/contact.html.twig', [
'controller_name' => 'MemberController',
]);
}
#[Route('member/rijlessen', name: 'app_rijles_member', methods: ['GET'])]
public function rijlessen(): Response
{
$rijlessen = $this->getUser()->getMemberRijles();
return $this->render('member/memberRijlessen.html.twig', [
'rijlessen' => $rijlessen,
]);
}
#[Route('member/profile{id}', name: 'app_user_index', methods: ['GET'])]
public function profileShow(User $user): Response
{
return $this->render('member/showprofile.html.twig', [
'user' => $user,
]);
}
#[Route('member/profiel/{id}/edit', name: 'app_user_edit', methods: ['GET', 'POST'])]
public function edit(Request $request, User $user, UserRepository $userRepository, UserPasswordHasherInterface $userPasswordHasher): Response
{
$form = $this->createForm(UserType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$user->setPassword(
$userPasswordHasher->hashPassword(
$user,
$form->get('password')->getData()
)
);
$userRepository->save($user, true);
return $this->redirectToRoute('app_member', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('member/edit.html.twig', [
'user' => $user,
'form' => $form,
]);
}
}
regester:
<?php
namespace App\Controller;
class RegistrationController extends AbstractController
{
#[Route('/register', name: 'app_register')]
public function register(Request $request, UserPasswordHasherInterface $userPasswordHasher, UserAuthenticatorInterface $userAuthenticator, LoginAuthenticator $authenticator, EntityManagerInterface $entityManager): Response
{
$user = new User();
$form = $this->createForm(RegistrationFormType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// encode the plain password
$user->setPassword(
$userPasswordHasher->hashPassword(
$user,
$form->get('plainPassword')->getData()
)
);
$user->setRoles(['ROLE_MEMBER']);
$entityManager->persist($user);
$entityManager->flush();
// do anything else you need here, like send an email
return $userAuthenticator->authenticateUser(
$user,
$authenticator,
$request
);
}
return $this->render('registration/register.html.twig', [
'registrationForm' => $form->createView(),
]);
}
}
**security**
<?php
class SecurityController extends AbstractController
{
#[Route(path: '/login', name: 'app_login')]
public function login(AuthenticationUtils $authenticationUtils): Response
{
// if ($this->getUser()) {
// return $this->redirectToRoute('target_path');
// }
// get the login error if there is one
$error = $authenticationUtils->getLastAuthenticationError();
// last username entered by the user
$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.');
}
}
我认为您应该创建一个实现接口的服务,如下面的代码所示。该服务将定义用户成功登录后会发生什么,特别是如何根据其角色进行重定向。
namespace App\Security;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface;
use Symfony\Component\Routing\RouterInterface;
class LoginSuccessHandler implements AuthenticationSuccessHandlerInterface
{
private $router;
public function __construct(RouterInterface $router)
{
$this->router = $router;
}
public function onAuthenticationSuccess(Request $request, TokenInterface $token)
{
$user = $token->getUser();
if (in_array('ROLE_ADMIN', $user->getRoles(), true)) {
$response = new RedirectResponse($this->router->generate('admin_dashboard'));
} elseif (in_array('ROLE_USER', $user->getRoles(), true)) {
$response = new RedirectResponse($this->router->generate('user_dashboard'));
} else {
$response = new RedirectResponse($this->router->generate('default_route'));
}
return $response;
}
}
并将处理程序添加到您的 security.yaml
security:
firewalls:
main:
...
success_handler: App\Security\LoginSuccessHandler