使用LexikJWT通过令牌获取用户配置文件

3
使用LexikJWTAuthenticationBundle、FOSRest和FOSUser,如何通过令牌获取已认证的用户配置文件?是否可能?
假设用户已经通过LexikJWT进行了身份验证,并且我有一个api端点,例如/api/profile,在该端点中,我发送令牌并期望获取指定的用户数据。
我在前端使用ReactJS和Redux。

不确定是否理解您的问题 - 当您的令牌是TokenInterface的实例时,$token->getUser()提供什么? - undefined
2个回答

14

这是一个示例,说明如何在用户已经通过身份验证的情况下,通过服务获取用户:

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() 获得任何内容。


感谢您的反馈!我仍然无法理解您的观点。所以情景是这样的:在api/profile上有一个受保护的路由,用户通过身份验证并通过React路由向个人资料路由发出请求,作为响应应该返回一些特定于用户的数据,例如头像等。在这一点上,我的控制器如何知道用户的信息? - undefined
1
控制器应通过$this->getUser()来了解用户,这是Symfony中每个扩展和使用“标准方式”的控制器中的快捷方式。 - undefined
是的,你说得对,但是我将我的控制器声明为服务,并且需要注入@security.token_storage - undefined

0

我是新手,但我可以尝试一下...

你可以使用注释来

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

在你的控制器中,可以使用类似$this->getUser()->getUsername();这样的代码来获取用户名。

示例:

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

之后将数据序列化,创建新的响应并返回。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接