Объединение машинописного Koa-Router и паспорта

Я новичок в Typescript и пытаюсь интегрировать koa-router и koa-passport. Установлено все @types\

import Koa from "koa";
import Route from "koa-router";
import passport from "koa-passport";
import session from "koa-session";

const app = new Koa();
const router = new Route();
app.keys = [process.env.SECRET_KEY || "secret"];
app.use(session({}, app));
app.use(passport.initialize());
app.use(passport.session());

app.use(router.routes()).use(router.allowedMethods());

И когда я пытаюсь использовать passport методы с router.

router.post("Logout", "/logout", ctx => {
  if (ctx.isAuthenticated()) {
    ctx.logout();
  }
});

есть ошибка в методах контекста (ctx)

Property 'isAuthenticated' does not exist on type 'ParameterizedContext<any, IRouterParamContext<any, {}>>'.
Property 'logout' does not exist on type 'ParameterizedContext<any, IRouterParamContext<any, {}>>'.

Пробовал разные подходы, но безуспешно. Ценю любую помощь.


person Talgat Saribayev    schedule 15.01.2020    source источник
comment
Удалось ли тебе это решить? У меня такая же проблема.   -  person plumpNation    schedule 02.05.2020


Ответы (1)


Я нашел один способ - определить все маршруты с отдельной функцией и определением типа паспорта как typeof KoaPassport. И для маршрута as Koa.Middleware тоже была эта проблема

// src/index.ts
import routes from "./routes";
...
routes(router, model, passport);
// src/routes/index.ts
function routes(router: Route, model: Model, passport: typeof KoaPassport) {
  router
        .post("Login", "/login", (async (ctx, next) => {
            await passport.authenticate("local", async (err, user) => {
                  ....
            })(ctx, next);
        }) as Koa.Middleware)
}
person Talgat Saribayev    schedule 02.05.2020