authentication_listener не работает при использовании пакета аутентификации JWT - PullRequest
0 голосов
/ 05 мая 2020

Я интегрирую lexik / jwtautheticationbundle версии 1.3 с symfony 2.8 из-за старых изменений в приложении.

Мне удалось интегрировать и сгенерировать токен авторизации JWT, но я хотел использовать cook ie и authentication_listener в lexit_jwt, и я использовал, но это не имеет никакого эффекта. Если я использую cook ie, токен должен быть сохранен в cook ie, но он сохраняется в сеансе.

Может кто подскажет, почему готовить ie включено не работает?

Security.yml

security:
    encoders:
        AppBundle\Entity\User:
            algorithm: bcrypt
    providers:
        db_provider:
            entity:
                class: AppBundle:User
                property: username

    firewalls:
        login:
            pattern:  ^/api/login
            stateless: true
            anonymous: true
            provider: db_provider
            form_login:
                check_path:               /api/login_check
                username_parameter:       username
                password_parameter:       password
                success_handler:          lexik_jwt_authentication.handler.authentication_success
                failure_handler:          lexik_jwt_authentication.handler.authentication_failure
                require_previous_session: false

        api:
            pattern:   ^/api
            stateless: true
            anonymous: true
            provider: db_provider
            lexik_jwt:
                authentication_listener: storefront.listener.jwt_authentication
                cookie:
                    enabled: true
                    name: IDENTITY


    access_control:
        - { path: ^/api/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/api,       roles: IS_AUTHENTICATED_FULLY }

services.yml

# Learn more about services, parameters and containers at
# https://symfony.com/doc/current/service_container.html
parameters:
    #parameter_name: value

services:

#service_name:
#    class: AppBundle\Directory\ClassName
#    arguments: ['@another_service_name', 'plain_value', '%parameter_name%']

storefront.listener.jwt_authentication:
    class: AppBundle\Listener\AuthenticationListener
    arguments:
        - "@security.token_storage"
        - "@security.authentication.manager"
        - []

AuthenicationListener . php

<?php
namespace AppBundle\Listener;

use Lexik\Bundle\JWTAuthenticationBundle\Security\Authentication\Token\JWTUserToken;
use Lexik\Bundle\JWTAuthenticationBundle\Security\Firewall\JWTListener;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\Security\Core\Exception\AuthenticationException;
class AuthenticationListener extends JWTListener
{
    /**
     * @param GetResponseEvent $event
     */
    public function handle(GetResponseEvent $event)
    {
        if (!($requestToken = $this->getRequestToken($event->getRequest()))) {
            return;
        }

        $token = new JWTUserToken();
        $token->setRawToken($requestToken);
        try {
            $authToken = $this->authenticationManager->authenticate($token);
            $this->tokenStorage->setToken($authToken);
            return;
        } catch (AuthenticationException $failed) {
            if ($this->config['throw_exceptions']) {
                throw $failed;
            }
        }
    }
}

1 Ответ

0 голосов
/ 07 мая 2020

Я думал, что когда включен cook ie, он сохранит токен в cook ie в браузере, но это означало просто читать токен только из cook ie. Так я понял сам. Все равно спасибо

...