我正在发现Nest.js,并且想使用GraphQL设置基于cookie的身份验证系统。
我已经安装了快速会话中间件,这是配置:
main.ts
app.use(
session({
store: new redisStore({
client: redis
} as any),
name: 'qid',
secret: SESSION_SECRET,
resave: false,
saveUninitialized: false,
cookie: {
httpOnly: true,
secure: !isDev,
maxAge: 1000 * 60 * 60 * 24 * 7 * 365
}
})
)
它工作正常,因为当我这样做时:
app.use((req: any, res: any, next: any) => {
// Debug purpose
req.session.userId = '42'
next()
})
已添加cookie。
现在我有两个变种,注册和登录。
在登录突变(或在userService中)中,找到用户后,我想执行类似req.session.userId = user.id
的操作,但是我找不到执行此操作的方法。
我尝试将@Context() ctx
添加到我的突变中。
如果我使用控制台ctx,它将包含我期望的所有内容(例如req.session.id)
但是如果我执行ctx.req.session.userId = 'something'
,则未设置Cookie!
这是我的突变:
user.resolver.ts
@Mutation('login')
async login(
@Args('email') email: string,
@Args('password') password: string,
@Context() ctx: any
) {
console.log(ctx.req.session.id) // Show the actual session id
ctx.req.session.userId = 'something' // Do not set any cookie
return await this.userService.login(email, password)
}
}
我完全迷路了,我真的需要帮助,我很想了解发生了什么事。我知道我可能完全错了,但是Nest和GraphQL都是新手。.
谢谢你们...
答案 0 :(得分:0)
很多天后我发现了问题...是...
GraphQL游乐场->设置->添加“ request.credentials”:“ include”(不包括“忽略”)
希望它将对某人有所帮助。