Session 如何使用解析会话令牌使用graphql发出请求

Session 如何使用解析会话令牌使用graphql发出请求,session,authentication,parse-server,graphql,relay,Session,Authentication,Parse Server,Graphql,Relay,我有一个解析应用程序,我想在sessionToken中发送每个请求,以便我知道哪个用户正在访问什么。就像这篇文章提到的 丹尼尔留下了这个评论,我似乎不能做他提到的事情 如果用户已登录客户端,则可能会将会话令牌传递给服务器,以允许使用该会话令牌进行解析查询(出于ACL原因) 在Relay中,我看到您可以通过头将sessionToken注入网络层, 但是在我的graphql服务器中,我似乎无法通过rootValue属性访问graphql中的sessionToken和passion 有人知道如何使用

我有一个解析应用程序,我想在sessionToken中发送每个请求,以便我知道哪个用户正在访问什么。就像这篇文章提到的

丹尼尔留下了这个评论,我似乎不能做他提到的事情

如果用户已登录客户端,则可能会将会话令牌传递给服务器,以允许使用该会话令牌进行解析查询(出于ACL原因)

在Relay中,我看到您可以通过
头将sessionToken注入网络层,
但是在我的graphql服务器中,我似乎无法通过
rootValue
属性访问graphql中的sessionToken和passion

有人知道如何使用解析服务器和身份验证吗? F8应用程序已将其删除,当前已将其标记为
TODO
,我无法解决此问题。

它将作为最后一个参数传递给所有解析程序函数。您可以将解析会话令牌作为头传递给任何
/graphql
请求,然后通过
上下文转发该令牌,如下所示:

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,请使用包含此标头,如下所示:

Relay.injectNetworkLayer(
  new Relay.DefaultNetworkLayer('http://example.com/graphql', {
    headers: {
      'parse-session-token': Parse.User.current().getSessionToken(),
    },
  })
);
如果您使用的是Apollo客户端,请在中间件函数中使用以提供标题:

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

谢谢@namuol,我正在使用Relay,我想在客户端添加一个登录功能来获取用户的令牌。有什么简单的方法可以做到这一点吗?我是否需要在express端创建一个单独的API,或者我可以使用graphQL来实现这一点?