如何在Apollo中返回用户对象的id属性?

时间:2017-02-07 18:38:21

标签: reactjs graphql auth0 apollo graphcool

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

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的任何帮助。

谢谢

1 个答案:

答案 0 :(得分:3)

FAQ article on the logged in user

中介绍了这一点

使用Auth0

获取签名JWT

user查询返回当前经过身份验证的用户。首先,我们必须考虑如何确定经过身份验证的用户。

目前最先进的是using verified JWT并将其作为Authorization标题传递。

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

使用Apollo Client设置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 })

检查this Auth0 example codethe live demo,看看它是如何运作的。

您可能也对this answer on authorization (permissions)感兴趣。