2017-02-07 2 views
1

私はidプロパティを含むgraphQLによって照会として全体のユーザーオブジェクトを取得することができていたユーザモデルを照会リアクトコンポーネントに以下の配置:Apolloでユーザーオブジェクトの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にアクセスするための助けに感謝します。

おかげ

答えて

3

これはFAQ article on the logged in userで覆われています。 Auth0

で署名されたJWTを取得

userクエリは、現在認証されたユーザを返します。最初に、認証されたユーザーがどのように決定されるかについて考える必要があります。

現在の最先端技術はusing verified JWTで、Authorizationヘッダーとして渡しています。

Auth0 Lockで有効な認証情報を入力すると、秘密のAuth0キーで署名されたJWTが返されます。この署名されたJWTはGraphQLサーバに送信され、ここであなたのAuth0キーを使って検証し、それが有効なユーザに属している場合、その要求は認証されます。アポロクライアント

Authorizationヘッダーを設定する

だから私は、あなたは、単に有効なAuthorizationヘッダーを渡していないと思われます。 Apolloを使用すると、トークンが存在する場合にトークンを確実に渡すことができます。それがどのように動作するか確認するために

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 codeまたはthe live demo:我々はAuth0ロックからトークンを保存するためのローカルストレージを使用しますので注意してください。

this answer on authorization (permissions)に興味があります。

+0

ありがとうございますが、私は実際に提案しているgithubプロジェクトを使用しています。それは、認証、照会、突然変異、全体の作業を扱っています。 –

+0

コードの前後に文脈を追加できますか?おそらく、 'data.loading'の前に' data'にアクセスしているかもしれません。 – marktani

+0

'data.loading'がfalseになる前は、です。 – marktani

関連する問題