2016-05-11 4 views
2

私は解析アプリケーションを持っており、各リクエストでsessionTokenを送信したいので、どのユーザーが何にアクセスしているか知っています。ちょうどこの投稿が言及したように。パースセッショントークンを使用してgraphqlでリクエストを行う方法

How to build a web app with GraphQL + parse.com?

ダニエルは、このコメントを残して、私は彼が言及何に見えることはできません。

ユーザーがクライアントにサインインした場合、セッショントークンをサーバーに渡して、そのセッショントークンを使用して構文解析クエリを行うことができます(ACLの理由で)。リレーで

、私は、あなたがheaders経由networkLayerにはsessionTokenを注入することができていることがわかり しかし、私のgraphqlサーバでは、私がrootValueプロパティを使用してgraphqlにこのはsessionTokenと情熱にアクセスできないようです。

パーズサーバーと認証の使用方法を知りましたか? F8アプリは、現在TODOとマークされており、これを理解することはできません。

答えて

3

Express-Graphql supports a context optionすべてのリゾルバ関数の最後の引数として渡されます。あなたはどの/graphqlリクエストにヘッダとして解析セッショントークンを渡し、そのので、同じようcontextを通じてその転送できます

import graphqlHTTP from 'express-graphql'; 

const app = express(); 

app.use('/graphql', graphqlHTTP((req) => ({ 
    // ... 
    context: { 
    parseSessionToken: req.headers['parse-session-token'], 
    }, 
}))); 

今、あなたは適切なACLが適用されていることを確認するためにあなたのクエリでこのトークンを使用することができますリゾルバ関数内:

function resolve (_, args, context) { 
    return new Parse.Query('MyClass') 
    .first({ sessionToken: context.parseSessionToken }); 
} 

あなたはクライアント側でリレーを使用している場合は、そのようにこのヘッダーを含めるようにRelay.injectNetworkLayerを使用します。

Relay.injectNetworkLayer(
    new Relay.DefaultNetworkLayer('http://example.com/graphql', { 
    headers: { 
     'parse-session-token': Parse.User.current().getSessionToken(), 
    }, 
    }) 
); 

あなたはヘッダを供給するミドルウェア機能でcreateNetworkInterfaceを使用し、アポロクライアントを使用している場合:

import ApolloClient, { createNetworkInterface } from 'apollo-client'; 

const networkInterface = createNetworkInterface('http://example.com/graphql'); 

networkInterface.use([{ 
    applyMiddleware(req, next) { 
    if (!req.options.headers) { 
     req.options.headers = {}; // Create the header object if needed. 
    } 
    req.options.headers['parse-session-token'] = Parse.User.current().getSessionToken(); 
    next(); 
    } 
}]); 

const client = new ApolloClient({ 
    networkInterface, 
}); 
+0

おかげで@namuol、私はリレーを使用していると私は、ユーザのをつかむために、クライアント側でのログイン機能を追加したいですトークン。これを行う簡単な方法はありますか?明示的に別のAPIを作成する必要がありますか、それを行うにはgraphQLを使用できますか? –

関連する問題