我已经安装了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
这将拯救我的一天,谢谢!
好吧,我只需要创建一个自定义用户提供者.它不能在实体上工作。
https:/symfony.comdoccurrentsecurityuser_provider.html#creating-a-custom-user-provider。