2

有没有一种简单的方法可以在 Symfony 上使用 FOSOAuthServerBundle 在控制器上获取当前客户端?

我的客户端实体上有一些属性,想在控制器中读取它们,但我找不到获取当前客户端的方法。

我只找到了获取当前用户($this->container->get('security.context')->getToken()->getUser();)的方法,但没有找到当前客户端。

编辑:我现在找到了获取客户端的方法,但它没有显示我添加到客户端实体的属性的值。以下代码:

$token = $this->container->get('security.context')->getToken()->getToken();
$accessToken = $this->container->get('fos_oauth_server.access_token_manager.default')->findTokenBy(array('token' => $token));
$client = $accessToken->getClient();
\Doctrine\Common\Util\Debug::dump($client);

正在倾销:

object(stdClass)[1180]
public '__CLASS__' => string 'CC\APIBundle\Entity\Client' (length=26)
public '__IS_PROXY__' => boolean true
public '__PROXY_INITIALIZED__' => boolean false
public 'id' => int 6
public 'name' => null
public 'city' => null
public 'randomId' => null
public 'secret' => null
public 'redirectUris' => 
  array (size=0)
    empty
public 'allowedGrantTypes' => null

因此,我的客户在 db 上的名称和城市没有显示......而且我认为有很多对 db 的调用可以以一种非常优雅的方式避免......

有任何想法吗?

4

2 回答 2

6
$tokenManager = $this->get('fos_oauth_server.access_token_manager.default');
$token        = $this->get('security.token_storage')->getToken();
$accessToken  = $tokenManager->findTokenByToken($token->getToken());

$client = $accessToken->getClient();
于 2016-02-05T10:51:29.753 回答
3
$tokenManager = $container->get('fos_oauth_server.access_token_manager.default');
$accessToken = $tokenManager->findTokenByToken(
    $container->get('security.context')->getToken()->getToken()
);
$client = $accessToken->getClient();

有你的客户,你看不到那里的属性,因为那只是一个代理。只要您请求以下属性:

$client->getName();

您会看到属性将被初始化。

请注意,这$container是您的服务容器,如果您在控制器内,请使用$this->container来获取当前的服务容器。

于 2014-05-12T21:04:40.713 回答