1

当我将以下内容放在查询用户模型的 React 组件中时,我能够获取 graphQL 查询的整个用户对象,包括 id 属性:

console.log(this.props.data.user)

但是当我尝试从代码中访问 id 属性时:

console.log(this.props.data.user) // undefined 
console.log(this.props.data.user.id)
 // error cannot get property of undefined 

我的第一个猜测是这是一个安全功能;我正在使用 Auth0 和 Graphcool。

但我可能只是以一种倒退的方式来解决这个问题。如果是这样,任何有关以正确方式访问用户 ID 的帮助将不胜感激。

谢谢

4

1 回答 1

3

登录用户的常见问题解答文章对此进行了介绍。

使用 Auth0 获取签名的 JWT

user查询返回当前经过身份验证的用户。所以首先我们要考虑如何确定认证用户。

当前最先进的技术是使用经过验证的 JWT并将它们作为Authorization标头传递。

在 Auth0 Lock 中输入有效凭据后,它会返回一个使用您的秘密 Auth0 密钥签名的 JWT。这个签名的 JWT 被发送到 GraphQL 服务器,我们将在其中使用您的 Auth0 密钥对其进行验证,如果它属于有效用户,则请求已通过身份验证。

使用 Apollo 客户端设置Authorization标题

所以我怀疑你根本没有传递有效的Authorization标题。使用 Apollo,您可以使用它来确保传递令牌(如果存在)。请注意,我们将使用本地存储来存储来自 Auth0 Lock 的令牌:

const networkInterface = createNetworkInterface({ uri: 'https://api.graph.cool/simple/v1/__PROJECT_ID__' })

// use the auth0IdToken in localStorage for authorized requests
networkInterface.use([{
  applyMiddleware (req, next) {
    if (!req.options.headers) {
      req.options.headers = {}
    }

    // get the authentication token from local storage if it exists
    if (localStorage.getItem('auth0IdToken')) {
      req.options.headers.authorization = `Bearer ${localStorage.getItem('auth0IdToken')}`
    }
    next()
  },
}])

const client = new ApolloClient({ networkInterface })

检查此 Auth0 示例代码现场演示以了解它是如何工作的。

您可能也对这个关于授权(权限)的答案感兴趣。

于 2017-02-07T20:46:36.603 回答