FOSUserBundle + LexixJWTAuthBundle通过电子邮件登录

时间:2017-09-10 13:17:50

标签: php symfony fosuserbundle fosrestbundle lexikjwtauthbundle

我必须为我的REST API使用jwt auth。现在一切正常但是当我试图通过对电子邮件/密码获取令牌时,我收到一个错误:凭据错误。当我使用用户名/密码时,一切正常。 我的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 个答案:

答案 0 :(得分:1)

所以答案是添加新的用户提供者:

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

我不知道为什么默认的fos_userprovider不起作用。也许有些设置错误。

答案 1 :(得分:0)

对于check_path,它是 check_path:/ login_check