0

尽管使用了理论上有效的身份验证令牌,但来自 UserProvider 的 userQuery 请求返回 nulluser并且 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,
})
4

1 回答 1

0

当您的 Graphcool 项目中没有与 JWT 中嵌入的 Auth0 id 对应的节点时,user查询将null在您的情况下返回。Userauth0UserId

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

于 2017-09-17T16:23:41.813 回答