【问题标题】:Get user data from token从令牌中获取用户数据
【发布时间】:2018-10-20 23:32:27
【问题描述】:

我一直在使用 symfony 和 Graphql (youshido/graphql-bundle) 创建一个 API,我想从 API 内的令牌中获取用户。 我应该在请求中将用户名作为参数传递,或者我可以从令牌中获取所有请求的用户?

什么是最好的解决方案?以及如何在解析功能上获取令牌?

public function resolve($value, array $args, ResolveInfo $info)
{
    return $this->container->get('resolver.user')->save($args);
}

谢谢。

【问题讨论】:

  • 请链接您的security.yml 配置,一切都取决于此。如果您在经过身份验证的路由下,您将能够从令牌存储中检索用户(来自控制器的$this->getUser())。您也可以在所有应用程序中从 tokenStorage 服务获取用户。
  • 我已经更新了问题
  • $tokenStorage = $this->container->get('security.token_storage'); $user = $tokenStorage->getToken()->getUser(); if($user instanceof User) { // The user which is calling you is currently authenticated } else { // Unfortunately the user IS'NT authenticated :/ } 试试看,如果你进去else你有app/config/security.yml配置的错误

标签: php symfony jwt graphql


【解决方案1】:

如果您正在开发 API,您必须在每个请求中使用 Bearer Token 对您的用户进行身份验证。 API 是无状态的:它们不会在您的浏览器中存储 cookie 信息(您可以,但这没有意义)。相反,您在每个请求的授权标头中传递一个令牌,这就是您进行身份验证的方式。

您可以使用经过验证的lexik/jwt-authentication-bundle 来实现一个 json 网络令牌认证系统。但首先要确保您了解 JWT 是什么以及如何很好地使用它们。

【讨论】:

    【解决方案2】:

    解决方案是在构造函数中注入 TokenStorage,然后从中获取用户

    public function __construct(TokenStorage $tokenStorage)
    {
        $this->tokenStorage = $tokenStorage;
    }
    

    从令牌中获取用户:

     $user = $this->tokenStorage->getToken()->getUser();
    

    【讨论】:

      猜你喜欢
      • 2016-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-21
      • 2020-05-05
      • 2021-07-05
      相关资源
      最近更新 更多