Mik*_*oid 5 authentication typescript graphql nestjs
我正在发现 Nest.js,并且想使用 GraphQL 设置基于 cookie 的身份验证系统。
我已经安装了express-session中间件,这是配置:
主要.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
}
})
)
Run Code Online (Sandbox Code Playgroud)
它工作正常,因为当我这样做时:
app.use((req: any, res: any, next: any) => {
// Debug purpose
req.session.userId = '42'
next()
})
Run Code Online (Sandbox Code Playgroud)
cookie 已添加。
现在我有两个突变,注册和登录。在登录突变(或在 userService 中)中,在我找到用户后,我想做类似的事情req.session.userId = user.id,但我找不到方法来做到这一点。
我尝试添加@Context() ctx我的突变。如果我控制台日志 ctx,它包含我期望的所有内容(例如 req.session.id)
但如果我这样做了ctx.req.session.userId = 'something',cookie 就不会被设置!
这是我的突变:
用户解析器.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)
}
}
Run Code Online (Sandbox Code Playgroud)
我完全迷失了,我真的需要帮助,我很想了解发生了什么。我知道我可能这样做完全错误,但我对 Nest 和 GraphQL 都是新手。
感谢你们...
几天后我发现了问题......而且是......
GraphQL Playground -> 设置 -> 添加“request.credentials”:“include”(并且没有“omit”)
希望它能帮助别人..
| 归档时间: |
|
| 查看次数: |
2383 次 |
| 最近记录: |