Пользовательский обработчик успеха/обработчик_ошибки в Symfony 6

Я новичок в Symfony (я начал работать месяц), я хочу создать систему входа/регистрации с помощью JWT и использую библиотеку LexikJWTAuthenticationBundle. Моя проблема: я хочу настроить ответ login_check, и я создал свои собственные прослушиватели успеха, как здесь:

и я вижу такую ​​ошибку, когда пытаюсь запустить:

<!-- Argument 1 passed to Symfony\Component\Security\Http\Authentication\CustomAuthenticationSuccessHandler::__construct() must implement interface Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface, instance of App\Listeners\AuthenticationSuccessListener given, called in /home/isha/work/coding/backend/api-colis/api-colis/var/cache/dev/ContainerA3xno95/getSecurity_Authenticator_JsonLogin_LoginService.php on line 48 (500 Internal Server Error) -->


Argument 1 passed to Symfony\Component\Security\Http\Authentication\CustomAuthenticationSuccessHandler::__construct() must implement interface Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface, instance of App\Listeners\AuthenticationSuccessListener given, called in /home/isha/work/coding/backend/api-colis/api-colis/var/cache/dev/ContainerA3xno95/getSecurity_Authenticator_JsonLogin_LoginService.php on line 48

error_500_symfony

Мне нужна помощь по пользовательскому обработчику успеха, пользовательскому ответу от Lexik JWT и по этой проблеме. Спасибо, хорошего дня

Я пишу свой собственный Success_handler

<?php
// file : src/Listeners/AuthenticationSuccessListener.php

namespace App\Listeners;

use Lexik\Bundle\JWTAuthenticationBundle\Event\AuthenticationSuccessEvent;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface;

class AuthenticationSuccessListener{

    public function onAuthenticationSuccessResponse(AuthenticationSuccessEvent $event){
       
        $event->setData([
            'status' => $event->getResponse()->getStatusCode(),
            'data' => $event->getData(),
        ]);
    }
}

и зарегистрируйтесь на service.yaml вот так:

# Custom listener success login
    app.listener.authentication_success_response:
        class:  App\Listeners\AuthenticationSuccessListener
        tags:
            -   { name: kernel.event_listener, event: lexik_jwt_authentication.handler.authentication_success, method: onAuthenticationSuccessResponse }   

и на security.yaml:

json_login:
                check_path: /api/v1/login_check
                username_path: username
                password_path: password
                # success_handler: lexik_jwt_authentication.handler.authentication_success
                success_handler: app.listener.authentication_success_response
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
239
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Спасибо всем, я нашел решение. Я переписываю свой SuccessHandler следующим образом:

<?php

namespace App\Listeners;

use Lexik\Bundle\JWTAuthenticationBundle\Security\Http\Authentication\AuthenticationSuccessHandler;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Security\Core\User\UserInterface;

class AuthenticationSuccessListener extends AuthenticationSuccessHandler
{
    public function handleAuthenticationSuccess(UserInterface $user, $jwt = null)
    {
        $response = parent::handleAuthenticationSuccess($user, $jwt);

        $newData = [
            'id' => $user->getId(),
            'username' => $user->getUsername(),
            'is_active' => $user->getIsActive(),
            'access_token'=>  json_decode($response->getContent(),true)['token'],
        ];
        $response->setData($newData);

        return new JsonResponse([
            'status'=> $response->getStatusCode(),
            'message'=> 'LOGIN SUCCESS',
            'data'=> json_decode($response->getContent(),true)
        ]);
    }
}

и получил такой ответ:

    {
    "status": 200,
    "message": "LOGIN SUCCESS",
    "data": {
        "id": 1,
        "username": "USER_AGENT_1",
        "is_active": 1,
        "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpYXQiOjE3MDg0MzQxMTIsImV4cCI6MTcwODQzNzcxMiwicm9sZXMiOlsiUk9MRV9VU0VSIl0sInVzZXJuYW1lIjoiV0FEQSJ9.iG02AF775eYCoN7xPYdhIN9krlXume6b-YkTyCm_uxIxZ0gK84BCecCFtldANcdF76mpSyvd-o9xLZ5yc4fng-h2vVizHMmBR8DB1X1WLS8BAVkyp9dtYgzMADFns3hnlYlv2Op_hBrJaAg5KePXv9jbYr4bxTIDq2vpQBWlqbXvjTEW2vr90-CYcB0fN4CdN2zN7d5q4iPiS1mw4EWrwP2s88sGRgRbRCiUYkOh9VHYt-xUUT7y-UMRtMWCTNvZxvFKPc3u2MhpGiCeQcgFo5Ux1n_zAb0FhlHcjYjjqYkj3YGKr2E-niFJpsOvXt47TBFaENFDv-u3olI7LuF-5V4TubSWU1d6hzL1w2tsCF_9xR0xfPDJYEK3i3MRne27vS6xmePXtUrgq6oYw7v6rLa8dGgM4SZpPsyB6uqEwXv4hvpPVmy4eyUGrWXQ4kKt2pbOg13AB8weZJl_35cKU0ATMaRV2hc-62BzOxL_ZgpmwbT508817oM35EaAXXQz7EXICuMKdKgg8gETeeRDS2gcru-C_KVAIbJVtjtMUQtjRiInVy7QQBoXx-ZCgV4O39hmEoxGiX7ggwZE68gVHG_bPnURgz4FH4xY3APvoq5iWTjYW2hV4CC-9KTqztA4j9lsnoYEN9G_JQJw3X6ygJk-E9pv41-g1rXvvrNocy4"
    }
}

Другие вопросы по теме