FOSUserBundle + LexixJWTAuthBundle login via email

128 views Asked by At

I have to have jwt auth for my REST API. Now everything works fine but when I'm trying to get token via pair email/password I get an error: Bad credentials. When I use username/password everything is ok. My security.yml

security:
    encoders:
        FOS\UserBundle\Model\UserInterface: sha512

    providers:
        fos_userbundle:
            id: fos_user.user_provider.username_email

    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        api_doc:
            pattern: ^/api/doc
            anonymous: true
            security: false

        login:
            pattern:  ^/login
            stateless: true
            anonymous: true
            form_login:
                check_path:               /login
                username_parameter:       username
                password_parameter:       password
                provider:                 fos_userbundle
                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
            guard:
                authenticators:
                    - lexik_jwt_authentication.jwt_token_authenticator

        password:
            pattern:    ^/user/passwords
            anonymous:  true
            security:   false

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

config.yml

lexik_jwt_authentication:
    private_key_path:     '%jwt_private_key_path%'
    public_key_path:      '%jwt_public_key_path%'
    pass_phrase:          '%jwt_key_pass_phrase%'
    token_ttl:            '%jwt_token_ttl%'
    user_identity_field:  email
2

There are 2 answers

3
Vladymyr Hrychenko On

So the answer was to add new user provider:

providers:
        main_provider:
            entity: { class: UserBundle\Entity\User, property: email }

I don't know why default fos_userprovider didn't work. Maybe some setup in error.

0
Elisabeth On

For check_path it have be check_path: /login_check