如何在服务中获取req.user?

mar*_*nka 5 javascript request node.js typescript nestjs

我在 NestJs 中创建一个身份验证中间件,如下所示:

@Injectable()
export class AuthenticationMiddleware implements NestMiddleware {
    constructor() {}

    async use(req: any, res: any, next: () => void) {        
        const authHeaders = req.headers.authorization;
        
        if (authHeaders) {

            //some logic etc.
            //req.user = user;

            next();
        } else {
            throw new UnathorizedException();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

...我从标题中获取一个身份验证令牌,对其进行解码并检查该用户是否正确并且存在于数据库中,如果他存在,那么我将user对象设置为req.user. 现在我有一个问题,如何req.user在我的服务中获取它并在业务逻辑中使用?我需要从中获取 ID req.user,但我不知道如何获取。

我知道我可以通过@Req() request在控制器参数中使用并将其传递request到我的函数中来做到这一点,但我不想要它,因为(对我来说)是一种丑陋的做法。那么,如何将其纳入req.user我的服务中呢?

谢谢你的帮助!

小智 -1

您可以像这样定义自己的Request接口

import { Request } from 'express';
...

export interface IRequestWithUser extends Request {
  user: User;
}
Run Code Online (Sandbox Code Playgroud)

然后只需将req参数的类型赋予IRequestWithUser.