使用FOSOAuthServerBundle获取控制器上的当前客户端

时间:2014-02-07 12:58:53

标签: symfony fosoauthserverbundle

是否有一种简单的方法可以在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的方法可以以一种非常优雅的方式避免......

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

$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();

答案 1 :(得分: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来获取当前的容器。