2

使用 LexikJWTAuthenticationBundle、FOSRest、FOSUser 如何通过令牌获取经过身份验证的用户配置文件。可能吗?

因此,假设用户已经通过 LexikJWT 进行了身份验证,并且我有一个 api 端点,就像/api/profile我发送令牌的地方一样,我希望获得指定的用户数据。

我正在使用带有 Redux 的前端 ReactJS。

4

2 回答 2

11

这是一个在用户已经通过身份验证时如何通过服务获取用户的示例:

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

于 2017-02-13T10:01:39.293 回答
0

我是新人,但我可以试试...

您可以使用注释,例如

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

在您的控制器中,以及$this->getUser()->getUsername();获取用户名之类的东西。

例子:

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

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

于 2017-10-30T20:43:35.350 回答