我有一个 NestJS 应用程序,其中包含一些身份验证逻辑。登录是使用 Passport 为 Google Oauth 实现的,似乎可以正常工作,但在服务器上我会出现此错误:
(node:19195) UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
Run Code Online (Sandbox Code Playgroud)
我谷歌了一下,似乎常见的原因之一可能是向客户端发送几次响应。话虽如此,我无法在我的代码中发现这一点,所以我怀疑这是否是原因。以下是相关的片段。
使用@nestjs/passport 对用户进行序列化和反序列化。
@Injectable()
export class GoogleSerializer extends PassportSerializer {
constructor(private readonly usersService: UsersService) {
super();
}
public serializeUser(user: User, done: Function) {
console.log('serialize', user);
if (user) {
done(null, user.id);
} else {
done(null);
}
}
public async deserializeUser(id: number, done: Function) {
console.log('deserialize', id);
this.usersService.findById(id).then(user => {
done(null, user);
}).catch(error => {
done(error, null);
});
}
} …Run Code Online (Sandbox Code Playgroud)