Node.js 在express graphql上下文中未定义request.session.user
我正在构建一个使用Node/Express和Graphql的应用程序。我们将此模块用于graphql server express,并且使用express会话将用户维护到request.session中。在我们开始考虑保护我们的查询(用户需要在咨询之前进行身份验证)之前,一切都很正常 当我们使用Graphiql时,我们的设计是完美的,但是,在应用程序内部,会话根本不包含登录的用户。已经调试了很多次,用户出现在会话中,但GraphQlExpress一直说没有。以下是我的配置:Node.js 在express graphql上下文中未定义request.session.user,node.js,reactjs,express,graphql,apollo-server,Node.js,Reactjs,Express,Graphql,Apollo Server,我正在构建一个使用Node/Express和Graphql的应用程序。我们将此模块用于graphql server express,并且使用express会话将用户维护到request.session中。在我们开始考虑保护我们的查询(用户需要在咨询之前进行身份验证)之前,一切都很正常 当我们使用Graphiql时,我们的设计是完美的,但是,在应用程序内部,会话根本不包含登录的用户。已经调试了很多次,用户出现在会话中,但GraphQlExpress一直说没有。以下是我的配置: app.use('/
app.use('/graphql', bodyParser.json(), graphqlExpress(request => ({
schema,
context: { user: request.session.user })));
登录后,我的express会话设置如下:
const user = employee.dataValues;
request.session.user = user;
除了我尝试参考graphql上下文(该上下文不包含会话中的用户)外,所有操作都运行得很好:
allCandidates: {
type: new GraphQLList(CandidateType),
resolve(_, args, context) {
return protect(context, () => Candidate.findAll());
}},
同样,route/graphiql工作得很好。但是/graphql没有。我的客户端正在使用React和Apollo Graphql
你们有什么意见吗
谢谢听起来很奇怪,可能不是来自
expressgraphql
。你能发布保护功能代码吗?嗨@whitep4nther。。。protect函数就是这样的:constprotect=(context,…fn)=>flow([isAuthenticated,…fn])(context)代码>我所做的就是使用Lodash“Flow”函数按顺序处理所有函数调用。但是,问题出在resolve函数内部。context属性未定义,因此我的protect函数将始终认为用户未经过身份验证。还没有找到解决问题的好方法:(听起来很奇怪,可能不是来自express graphql
。你能发布保护函数代码吗?Hi@whitep4nther…保护函数就是这样:const protect=(context,…fn)=>flow([isAuthenticated,…fn])(context);
我所做的就是使用Lodash“Flow”函数按顺序处理我的所有函数调用。但是,问题出在resolve函数内部。上下文属性未定义,因此我的protect函数将始终认为用户未通过身份验证。尚未找到解决问题的好方法:(