GraphQL graph.cool 用户查询不适用于 Auth0 令牌

Posted

技术标签:

【中文标题】GraphQL graph.cool 用户查询不适用于 Auth0 令牌【英文标题】:GraphQL graph.cool user query not working with Auth0 token 【发布时间】:2018-02-25 03:02:29 【问题描述】:

尽管使用了理论上有效的身份验证令牌,但来自 UserProvider 的 userQuery 请求返回 null user 和 networkStatus 7,表明它已完成加载并且没有“错误”,尽管用户为 null。

class UserProvider extends React.Component 
  render() 
    if (this.props.data.user) 
      window.localStorage.setItem("userId", this.props.data.user.id)
    

    if (this.props.data.loading) 
      return <div>Loading</div>
    

    return this.props.children(this.props.data.user)
  


const userQuery = gql`
  query 
    user 
      id
    
  
`

export default graphql(userQuery, 
  options:  fetchPolicy: "network-only" ,
)(UserProvider)

我正在使用此代码设置网络接口。

const wsClient = new SubscriptionClient(
  `wss://subscriptions.graph.cool/v1/redacted`,
  
    reconnect: true,
  
)

const networkInterface = createNetworkInterface(
  uri: "https://api.graph.cool/simple/v1/redacted",
)

const networkInterfaceWithSubscriptions = addGraphQLSubscriptions(
  networkInterface,
  wsClient
)

networkInterfaceWithSubscriptions.use([
  
    applyMiddleware(req, next) 
      if (!req.options.headers) 
        req.options.headers = 
      

      console.log("applying middleware")

      // get the authentication token from local storage if it exists
      if (localStorage.getItem("auth0IdToken")) 
        console.log("apply header", localStorage.getItem("auth0IdToken"))
        req.options.headers["Authorization"] = `Bearer $localStorage.getItem(
          "auth0IdToken"
        )`
      

      next()
    ,
  ,
])

let client = new ApolloClient(
  networkInterface: networkInterfaceWithSubscriptions,
)

【问题讨论】:

【参考方案1】:

user 查询将在您的情况下返回 null,如果您的 Graphcool 项目中没有 User 节点,其中 auth0UserId 对应于嵌入在 JWT 中的 Auth0 id。

请将您的令牌粘贴到https://jwt.io/ 并检查是否存在具有打印在那里的 id 的用户。 Auth0 id 以身份验证提供程序开头,例如 Google 的 google-oauth2|&lt;google id&gt;

【讨论】:

以上是关于GraphQL graph.cool 用户查询不适用于 Auth0 令牌的主要内容,如果未能解决你的问题,请参考以下文章

如何更新 graphql 端点(不使用 Graph.cool)

Delphi 与 Graph.cool API?

按当前时间戳的 GraphQL 查询过滤器

如何在 GraphQL 中过滤大于

带有args的graphql查询不适用于用户ID

Graphql 突变查询不适用于 express-graphql