Я сейчас работаю над экспресс-приложением, использующим машинописный текст. В настоящее время я работаю над промежуточным программным обеспечением аутентификации и задавался вопросом, можете ли вы сделать промежуточное программное обеспечение безопасным способом:
authenticateJwt = (
req: RequestWithToken,
res: Response,
next: () => void
) => {
// Append the decoded req.token to the req header so we can use it internally
const token = req.token;
// @ts-ignore
this.verifyJwt(token)
.then((decoded: Token) => {
req.token = decoded;
next();
})
.catch(() => res.status(401).send('Unauthorized'));
};
теперь в моем routes.ts:
router.get(
'/me',
// @ts-ignore
jwtService.authenticateJwt,
userController.getProfileFromUser
);
Я должен написать // @ ts-ignore, потому что он говорит, что '(req: RequestWithToken, res: Response, next: () => void) => void не относится к типу RequestHandlerParams
определение RequestWithToken:
export interface RequestWithToken extends Request {
token: Token;
}
export interface Token {
username: string;
}





Ты пытался :
const token = req.token as Token;
@MichelVorwieger Я забыл, вам также нужно повторно ввести свой интерфейс запроса, как в stackoverflow.com/questions/37377731/…
теперь он работает в моем промежуточном программном обеспечении, но экспресс-маршрутизатор все еще жалуется, что (req: Request, res: Response, next: () => void) => void не относится к типу RequestHandlerParams
Я исправил это, также перезаписав объект Request из express-serve-static-core
@MichelVorwieger, я рад, что ты решил эту проблему. Я все равно прошу вас ответить на свой вопрос в этой ветке, а не просто комментировать мой ответ. Это поможет и другим товарищам.
создать custom.d.ts
и перезаписать интерфейс Requestexpress и express-serve-static-core
declare module 'express' {
interface Request {
token: Token;
}
}
declare module 'express-serve-static-core' {
interface Request {
token: Token;
}
}
таким образом и RequestHandlerParams (обычно ваш контроллер), и RequestHandler (обычно ваше промежуточное ПО) получают ваш новый интерфейс Request.
затем добавьте его в раздел files вашего tsconfig.json:
"files": [
"src/custom.d.ts"
]
Если я использую
req: Requestи то, что вы написали, то там говорится, чтоreq.tokenне существует для типаRequest.