Я не смог найти понятный способ передачи переменных из промежуточного ПО в структуру в Nest.js. Я проверяю JWT внутри своего AuthMiddleware
и хочу сделать этот токен доступным для контроллеров.
Ниже приведен только фрагмент моего промежуточного программного обеспечения для предоставления примера кода. Я хочу сделать token
доступным внутри моих контроллеров.
import { Request, Response, NextFunction } from 'express';
// other imports
@Injectable()
export class AuthMiddleware implements NestMiddleware {
async use(req: Request, res: Response, next: NextFunction) {
const authHeader = req.header('authorization');
if (!authHeader) {
throw new HttpException('No auth token', HttpStatus.UNAUTHORIZED);
}
const bearerToken: string[] = authHeader.split(' ');
const token: string = bearerToken[1];
res.locals.token = token;
}
}
Я уже пытался сделать токен доступным, изменив переменную res.locals
, но объект ответа все еще пуст в моем контроллере.
Это мой контроллер, в котором я хочу получить доступ к токену промежуточного программного обеспечения:
@Controller('did')
export default class DidController {
constructor(private readonly didService: DidService) {}
@Get('verify')
async verifyDid(@Response() res): Promise<string> {
console.log(res)
// {}
return res;
}
Вы пытались прикрепить
req
вместоres
?Пытался прикрепить к телу, не получилось.
Я также не могу прикрепить его только к объекту
req
, потому что типRequest
из экспресса не имеет этого ключа.вы можете, но вам придется написать свой собственный интерфейс/тип, расширяющий тип
Request
. Кстати, я только что проверилreq.locals = 123
, и он работал, как и ожидалось. Убедитесь, что ваше промежуточное ПО запущено до методаverifyDid
.да работал, когда просто определял req как любой