2017-02-12 31 views
2

使用LexikJWTAuthenticationBundle,FOSRest,FOSUser如何通過令牌獲得通過身份驗證的用戶配置文件。可能嗎?LexikJWT通過令牌獲取用戶配置文件

假設用戶已通過LexikJWT進行身份驗證,並且我有一個像/api/profile這樣的API端點,我發送該令牌並期望獲得指定的用戶數據。

我用前端ReactJS與Redux。

+0

不確定是否理解您的問題 - 當您的令牌是TokenInterface的實例時,$ token-> getUser()提供了什麼? – LBA

回答

3

這是當用戶已經認證瞭如何通過服務來獲取用戶的例子:

class UserService 
{ 

    /** @var TokenStorageInterface */ 
    private $tokenStorage; 

    /** 
    * @param TokenStorageInterface $storage 
    */ 
    public function __construct(
     TokenStorageInterface $storage, 
    ) 
    { 
     $this->tokenStorage = $storage; 
    } 

    public function getCurrentUser() 
    { 
     $token = $this->tokenStorage->getToken(); 
     if ($token instanceof TokenInterface) { 

      /** @var User $user */ 
      $user = $token->getUser(); 
      return $user; 

     } else { 
      return null; 
     } 
    } 
} 

而在你services.yml

tenant_user_service: 
    class: YourBundle\YourPackage\UserService 
    arguments: [ '@security.token_storage' ] 

這將返回用戶 - 但請注意,根據用戶在認證過程中如何設置令牌的方式,只能將您的用戶名視爲字符串。但基本上,您可以從當前的$ token-> getUser()獲取任何內容。

+0

感謝您的意見!我仍然無法理解你的觀點。因此,情況將是:保護路由到'api/profile'用戶驗證自己,並通過反應路由請求配置文件路由,因爲響應應該找回一些用戶特定的數據,如頭像等。在這一點上,我的控制器知道用戶? – fefe

+0

控制器應該通過以下方式知道用戶:'$ this-> getUser()'這是每個Symfony的控制器中的一個快捷方式,它被擴展並使用'標準方式' – LBA

+0

是的,你說得對,但我有我的控制器,需要注入'@ security.token_storage' – fefe

0

我是新的,但我可以試試...

您可以像使用

@Security("is_granted('ROLE_USER')") 

註釋在您的控制器和類似$this->getUser()->getUsername();來獲取用戶名。

例如:

$user = $this->get('doctrine.orm.default_entity_manager') 
    ->getRepository('AppBundle:User') 
    ->FindOne($this->getUser()->getUsername());` 

之後你序列DATAS,創建新的響應並返回它。

相關問題