在symfony项目中,在Booking实体的控制器中,我想检查用户是否有角色,然后重定向它们

问题描述 投票:0回答:1

这段代码是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.');
    }
}



symfony
1个回答
0
投票

我认为您应该创建一个实现接口的服务,如下面的代码所示。该服务将定义用户成功登录后会发生什么,特别是如何根据其角色进行重定向。

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
© www.soinside.com 2019 - 2024. All rights reserved.