Межплатформенное программное обеспечение Typesafe Express и маршруты? - PullRequest
0 голосов
/ 15 января 2019

Я сейчас работаю над экспресс-приложением, которое использует машинопись. В настоящее время я работаю над промежуточным программным обеспечением для аутентификации, и мне было интересно, можно ли сделать так, чтобы промежуточное программное обеспечение было безопасным:

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'));
};

сейчас в моих route.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;
}

Ответы [ 2 ]

0 голосов
/ 15 января 2019

создать custom.d.ts и перезаписать Request интерфейс express и express-serve-static-core

declare module 'express' {
  interface Request {
    token: Token;
  }
}

declare module 'express-serve-static-core' {
    interface Request {
        token: Token;
    }
}

таким образом и RequestHandlerParams (обычно ваш контроллер) и RequestHandler (обычно ваше Middleware) получают ваш новый Request интерфейс.

затем добавьте его в раздел files вашего tsconfig.json:

"files": [
    "src/custom.d.ts"
]
0 голосов
/ 15 января 2019

Вы пробовали:

const token = req.token as Token;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...