Изменить: Обнаружил ошибку. Крошечный кусочек кода в \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 неверно или просто опечатка (из оригинальные документы)
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
ты потерялся. Нет ошибок, нет предупреждений, пользовательский поставщик просто нулевой. Спасибо за чтение этого сообщения в любом случае. Я буду обсуждать этот вопрос на GitHub.
—
Я строю сервер OAuth2 с FOSOAuthServerBundle. Все работает, пока я запрашиваю access_token с grant_type = password и использую form_login с пользовательским UserProvider.
Мой 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
Поскольку пользовательского поставщика не хватало для моих нужд, я реализовал пользовательский поставщик аутентификации, выполнив следующие действия. этот урок. Этот также работает, когда я пытаюсь войти с помощью стандартной формы входа. Я изменил 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 всегда равен нулю.
Кто-нибудь знает, что я здесь не так делаю? Я полностью застрял, и любая помощь очень ценится!
Задача ещё не решена.
Других решений пока нет …