2017-09-15 55 views
0

尽管使用理论上有效的认证令牌,来自UserProvider的userQuery请求返回空user和networkStatus为7,表明它已完成加载并且没有“错误, “尽管用户为空。GraphQL graph.cool用户查询不与Auth0令牌一起工作

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, 
}) 

回答

0

user查询将在您的情况返回null,当在你的Graphcool项目中没有User节点,在auth0UserId对应嵌入在JWT的Auth0 ID。

请将您的令牌粘贴到https://jwt.io/并检查用户是否存在带有在其中打印的ID。 Auth0 ID以auth提供商开始,例如google-oauth2|<google id>