是否有一种简单的方法可以在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的方法可以以一种非常优雅的方式避免......
有什么想法吗?
答案 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
来获取当前的容器。