2016-12-22 215 views
0

我遇到了Symfony 3上JWT Auth包的問題。我按照他們的github自述文件中的說明進行了操作,但似乎無法找出我出錯的地方或什麼是出錯了。Symfony LexikJWTAuthenticationBundle無法進行身份驗證

我使用Symfony 3.1.1,使用LexikJWTAuthenticationBundle 2.0 和FriendsofSymfony userbundle。

問題: 每當我嘗試登錄爲通過指示在他們的榜樣(以用戶名和密碼取代):

curl -X POST http://192.168.33.30/api/login_check -d _username=johndoe -d _password=test 

我得到:

{"code":401,"message":"Bad credentials"} 

如果我產生代幣手動通過:

 $jwtManager = $this->container->get('lexik_jwt_authentication.jwt_manager'); 
    $userManager = $this->container->get('fos_user.user_manager'); 
    $user = $userManager->findUserByEmail('emailhere'); 
    dump($jwtManager->create($user)); 

我得到了相當長的令牌。然後在postman中使用它作爲標題爲「授權」值的標題:「承載」

然後我嘗試在防火牆url下調用端點,並觸發failure_handler。它設法從令牌中提取數據,即我在令牌中編碼的電子郵件等等。但我總是失敗。

我的另一個數據是:

security.yml 安全: 編碼器: FOS \ UserBundle \型號\的UserInterface:bcrypt

role_hierarchy: 
    ROLE_ADMIN:  ROLE_USER 
    ROLE_SUPER_ADMIN: ROLE_ADMIN 


# http://symfony.com/doc/current/book/security.html#where-do-users-come-from-user-providers 
providers: 
    in_memory: 
     memory: ~ 
    fos_userbundle: 
     id: fos_user.user_provider.username 
     firewalls: 
    # disables authentication for assets and the profiler, adapt it according to your needs 
    dev: 
     pattern: ^/(_(profiler|wdt)|css|images|js)/ 
     security: false 
    login: 
     pattern: ^/api/login 
     stateless: true 
     anonymous: true 
     form_login: 
      check_path:    /api/login_check 
      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 
    main: 
     pattern: ^/ 
     form_login: 
      provider: fos_userbundle 
      # csrf_token_generator: security.csrf.token_manager 

     logout:  true 
     anonymous: true 

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% 
# key under which the user identity will be stored in the token payload 
user_identity_field: email 

# token encoding/decoding settings 
encoder: 
    # token encoder/decoder service - default implementation based on the namshi/jose library 
    service:   lexik_jwt_authentication.encoder.default 
    # crypto engine used by the encoder service 
    crypto_engine: openssl 
    # encryption algorithm used by the encoder service 
    signature_algorithm: RS256 

# token extraction settings 
token_extractors: 
    authorization_header:  # look for a token as Authorization Header 
     enabled: true 
     prefix: Bearer 
     name: Authorization 
    cookie:     # check token in a cookie 
     enabled: false 
     name: BEARER 
    query_parameter:   # check token in query string parameter 
     enabled: false 
     name: bearer 

路由.yml

api_login_check: 
path: /api/login_check 

如果有人有任何建議,請讓我知道。我很難過這個。

回答

2

您需要刪除在內存中的用戶提供:

providers: 
    fos_userbundle: 
     id: fos_user.user_provider.username 
+0

完美。不知道爲什麼in_memory配置在那裏。謝謝! – Greg

相關問題