編集:エラーが見つかりました。次のようなコードの小さな平和が\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
あなたは迷っています。エラーも警告もありません。ユーザー プロバイダーは単に 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
カスタム ユーザー プロバイダーは私のニーズには不十分だったので、このチュートリアルに従ってカスタム認証プロバイダーを実装しました。標準のログインフォームでログインしようとすると、これも機能します。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 です。
私がここで間違っていることを誰か知っていますか?私は完全に立ち往生しており、どんな助けも大歓迎です!