如何在不使用 FOSUserBundle 的情况下实现基于 FOSOAuthServerBundle 的 OAuth 服务器?
我的用户类开始像他的:
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;
/**
*
* @ORM\Entity
* @ORM\Table(name="user")
* @ORM\Entity(repositoryClass="AppBundle\Entity\UserRepository")
*/
class User implements UserInterface
我的用户存储库类以此开头:
<?php
namespace AppBundle\Entity;
use Symfony\Bridge\Doctrine\Security\User\UserLoaderInterface;
use Symfony\Component\Security\Core\User\UserProviderInterface;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\NoResultException;
class UserRepository extends EntityRepository implements UserLoaderInterface, UserProviderInterface
在我的 security.yml 中,我包括以下内容:
providers:
user_db:
entity:
class: AppBundle\Entity\User
property: username
最后是 config.yml:
fos_oauth_server:
db_driver: orm
client_class: AppBundle\Entity\OAuthClient
access_token_class: AppBundle\Entity\OAuthAccessToken
refresh_token_class: AppBundle\Entity\OAuthRefreshToken
auth_code_class: AppBundle\Entity\OAuthAuthCode
service:
options:
access_token_lifetime: 3600
user_provider: user_db
#user_provider: AppBundle\Entity\UserRepository
#user_provider: AppBundle\Entity\User
现在它抛出一个异常:
[1] Symfony\Component\Debug\Exception\FatalThrowableError: Call to a member function loadUserByUsername() on null
at n/a
in /home/wanderson/api/vendor/friendsofsymfony/oauth-server-bundle/Storage/OAuthStorage.php line 161
at FOS\OAuthServerBundle\Storage\OAuthStorage->checkUserCredentials(object(OAuthClient), 'admin', 'admin')
in /home/wanderson/api/vendor/friendsofsymfony/oauth2-php/lib/OAuth2.php line 929
at OAuth2\OAuth2->grantAccessTokenUserCredentials(object(OAuthClient), array('grant_type' => 'password', 'scope' => null, 'code' => null, 'redirect_uri' => null, 'username' => 'admin', 'password' => 'admin', 'refresh_token' => null))
in /home/wanderson/api/vendor/friendsofsymfony/oauth2-php/lib/OAuth2.php line 815
at OAuth2\OAuth2->grantAccessToken(object(Request))
in /home/wanderson/api/vendor/friendsofsymfony/oauth-server-bundle/Controller/TokenController.php line 42
at FOS\OAuthServerBundle\Controller\TokenController->tokenAction(object(Request))
in line
at call_user_func_array(array(object(TokenController), 'tokenAction'), array(object(Request)))
in /home/wanderson/api/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php line 153
at Symfony\Component\HttpKernel\HttpKernel->handleRaw(object(Request), '1')
in /home/wanderson/api/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php line 68
at Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), '1', true)
in /home/wanderson/api/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Kernel.php line 169
at Symfony\Component\HttpKernel\Kernel->handle(object(Request))
in /home/wanderson/api/web/app_dev.php line 30
at require('/home/wanderson/api/web/app_dev.php')
in /home/wanderson/api/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Resources/config/router_dev.php line 40