编辑:发现错误。 \vendor\friendsofsymfony\oauth-server-bundle\FOS\OAuthServerBundle\Resources\config\oauth.xml
中的代码有一点点安静,其中说:
<argument type="service" id="fos_oauth_server.user_provider" on-invalid="null" />
所以当你在config.yml中的服务定义错误或只是一个错字(来自original docs)
If you're authenticating users, don't forget to set the user provider. Here's an example using the FOSUserBundle user provider:
# app/config/config.yml
fos_oauth_server:
...
service:
user_provider: fos_user.user_manager
你迷路了。没有错误,没有警告,用户提供程序只是null。无论如何,感谢你阅读这篇文章。我将在github上讨论这个问题。
-
我正在使用FOSOAuthServerBundle构建OAuth2服务器。一切正常,只要我使用grant_type = password请求access_token并使用带有自定义UserProvider的form_login。
我的security.yml看起来像这样。
security:
providers:
webservice:
id: webservice_user_provider
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
oauth_authorize:
pattern: ^/oauth/v2/auth
form_login:
provider: webservice
check_path: login_check
login_path: login
anonymous: true
oauth_token:
pattern: ^/oauth/v2/token
security: false
api:
pattern: ^/api
fos_oauth: true
stateless: true
default:
anonymous: ~
form_login:
provider: webservice
login_path: /login
check_path: /login_check
logout:
path: /logout
target: /
login:
pattern: ^/login$
security: false
由于自定义用户提供商不足以满足我的需求,因此我在this Tutorial之后实施了自定义身份验证提供程序。当我尝试使用标准登录表单登录时,这个也正常工作。我将security.yml更改为
oauth_authorize:
pattern: ^/oauth/v2/auth
webservice-login:
provider: webservice
check_path: login_check
login_path: /login
anonymous: true
webservice-login:
check_path: login_check
login_path: /login
provider: webservice
webservice-login来自SecurityFactory
class SecurityFactory extends FormLoginFactory
{
public function getKey()
{
return 'webservice-login';
}
protected function getListenerId()
{
return 'security.authentication.listener.form';
}
protected function createAuthProvider(ContainerBuilder $container, $id, $config, $userProviderId)
{
$provider = 'security.authentication_provider.als_webservice.'.$id;
$container
->setDefinition($provider, new DefinitionDecorator('security.authentication_provider.als_webservice'))
->replaceArgument(1, new Reference($userProviderId))
->replaceArgument(3, $id)
;
return $provider;
}
}
当我现在尝试获取访问令牌时,我收到错误消息:错误:
Call to a member function loadUserByUsername() on a non-object in
vendor\friendsofsymfony\oauth-server-bundle\FOS\OAuthServerBundle\Storage\OAuthStorage.php at line 165.
基本上,UserProvider始终为null。
有人知道吗,我在这里做错了什么?我完全陷入困境,非常感谢任何帮助!