Symfony Lexik JWT Неправильные учетные данные вместо 422 или 404 ошибок - PullRequest
0 голосов
/ 17 апреля 2020

Я использую JWT Bundle с SF4 + apache + PG SQL. У меня есть API и проверка входа. Попытка отправить POST-запрос с правильными учетными данными дает мне 200 OK. Попытка отправить POST-запрос с неверными учетными данными дает ВСЕГДА 401 неверных учетных данных и никогда go в моем коде, который должен ответить 422. В этом случае

Вот код:

/**
 * @Route("/api/login_check")
 * @param Request $request
 * @param JWTTokenManagerInterface $JWTManager
 * @param UserPasswordEncoderInterface $encoder
 * @return JsonResponse
 */
public function getTokenUser(Request $request, JWTTokenManagerInterface $JWTManager, UserPasswordEncoderInterface $encoder) {
    $request = $this->transformJsonBody($request);
    $username = $request->get('username');
    $password = $request->get('password');
    if (empty($username) || empty($password)) {
        return $this->respondValidationError("Invalid username or password");
    }
    $em = $this->getDoctrine()->getManager();
    /* @var $user User */
    $user = $em->getRepository(User::class)->findOneBy([
        'username' =>$username,
    ]);
    if (!$user) {
        //returns 422
        return $this->respondValidationError("User with these credentials not found");
    }
    if ($user->getPassword() !== $encoder->encodePassword($user, $password)) {
       //returns 422
     return $this->respondValidationError("User with these credentials not found");
    }
    return new JsonResponse(['test' => $JWTManager->create($user)]);
}

Если учетные данные неверны Я никогда не получаю в эту функцию, почему?

Вот защита:

security:
encoders:
    App\Entity\User:
        algorithm: bcrypt

    app_user_provider:
        entity:
            class: App\Entity\User
            property: username
firewalls:

    login:
        pattern:  ^/api/login
        stateless: true
        anonymous: true
        json_login:
            check_path:               /api/login_check
            success_handler:          lexik_jwt_authentication.handler.authentication_success
            failure_handler:          lexik_jwt_authentication.handler.authentication_failure
    api:
        pattern:   ^/api
        stateless: true
        provider: app_user_provider
        guard:
            authenticators:
                - lexik_jwt_authentication.jwt_token_authenticator
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false
    main:
        anonymous: lazy
        provider: app_user_provider
access_control:
    - { path: ^/register, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/api/login_check, roles:  IS_AUTHENTICATED_ANONYMOUSLY}
    - { path: ^/api,       roles: IS_AUTHENTICATED_FULLY }

Я пытался изменить apache config, security.yml config firewall, ничего не получалось. Пожалуйста, помогите

...