FOSOAuthServerBundle使用实体提供者Symfony 4。

问题描述 投票:0回答:1

我已经安装了fosOauthServerBundle和一个自定义的认证提供者(避免使用FosUserBundle)。

似乎我的服务配置不准确,所以bundle找不到用户提供者。

在null上调用成员函数loadUserByUsername()。

引用 :vendor\friendsofsymfony\oauth-server-bundle\Storage\OAuthStorage.php (第162行)

try {
       $user = $this->userProvider->loadUserByUsername($username);
    } catch (AuthenticationException $e) { 
       return false; 
   }

希望已经有帖子处理这种错误,但没有提出明确的解决方案。

上一主题同样的问题

我正在使用实体提供者,因为在文档中,它确实完美地使用一切,除了授予密码使用fosoauth(令人沮丧)。实体用户提供者链接

其实我试过几种方法把它写在config服务里,但都没能奏效,有谁能给我提供一个解决方案吗?

我试过app_user_provider.email或app_user_provider.username,但也不行。

security:
encoders:
  App\Entity\User:
    algorithm: bcrypt
    #FOS\UserBundle\Model\UserInterface: bcrypt

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER, ROLE_ESTABLISHMENT
    ROLE_SUPER_ADMIN: ROLE_ADMIN

providers:
    app_user_provider:
        entity:
            class: App\Entity\User
            property: email

firewalls:
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false

    oauth_token:
        pattern: ^/oauth/v2/token
        security: false

    # Add this firewall only in the Authorization code flow
    oauth_authorize:
        pattern: ^/oauth/v2/auth
        form_login:
            provider: app_user_provider
            check_path: /oauth/v2/auth_login_check
            login_path: /oauth/v2/auth_login
        anonymous: true

    api_doc:
        pattern: ^/api/doc
        fos_oauth: false
        stateless: true
        anonymous: true

    api:
        pattern: ^/api
        fos_oauth: true
        stateless: true
        anonymous: false

    main:
        pattern: ^/
        form_login:
            provider: app_user_provider
            csrf_token_generator: security.csrf.token_manager
        #logout: true
        guard:
            authenticators:
                - App\Security\LoginFormAuthenticator
        remember_me:
            secret:   '%kernel.secret%'
            lifetime: 604800 # 1 week in seconds
            path:     /
            always_remember_me: true
        logout:
            path: app_logout
            target: app_login
        fos_oauth: false
        anonymous: true

access_control:
    - { path: ^/oauth/v2/auth_login$, role: IS_AUTHENTICATED_ANONYMOUSLY } # Add this only in the Authorization code flow
    - { path: ^/api/doc, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/api, roles: IS_AUTHENTICATED_FULLY }
    - { path: ^/login, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/establishment, role: IS_AUTHENTICATED_ANONYMOUSLY }

fos_oauth_server:
db_driver:           orm
client_class:        App\Entity\Client
access_token_class:  App\Entity\AccessToken
refresh_token_class: App\Entity\RefreshToken
auth_code_class:     App\Entity\AuthCode
service:
    #user_provider: fos_user.user_provider.username
    user_provider: app_user_provider

这将拯救我的一天,谢谢!

symfony4 fosoauthserverbundle
1个回答
0
投票

好吧,我只需要创建一个自定义用户提供者.它不能在实体上工作。

https:/symfony.comdoccurrentsecurityuser_provider.html#creating-a-custom-user-provider。

© www.soinside.com 2019 - 2024. All rights reserved.