Как инкапсулировать Коа-Паспорт?
Возможно, это очень простой ответ, но с моим кодом что-то не так. Вот что я хочу сделать.
Я создал приложение koa2, используя koa-passport, и хочу инкапсулировать использование Passport в классе AuthAdapter (сокращено ниже).
class AuthAdapter {
setup(koaApp) {
koaApp.use(passport.initialize());
passport.use('http-bearer', new PassportHttpBearerStrategy(function(token, done) {
koaApp.log.info('passport: payload request', token);
return done(null, { clientId: 1 });
}));
}
async authroute(ctx, next) {
return passport.authenticate('http-bearer', (error, user, info) => {
if (error) {
ctx.throw(500, 'Authentication Error');
} if (!user) {
ctx.throw(403, 'Authentication Forbidden');
} else {
ctx.log.debug('Passport-Route-Mw: auth ok', { user: user, info: info });
}
})(ctx, next);
}
}
И у меня есть класс API и объявил маршруты как:
static _setupRoutes(koaApp, koaRouter) {
koaRouter
.get('getter', '/getter', koaApp.authAdapter.authroute, MyApi.myGetterMethod);
koaApp
.use(koaRouter.routes())
.use(koaRouter.allowedMethods());
}
... MyApi
static async myGetterMethod(ctx) {
...
}
Теперь проблема: setup и setupRoutes вызываются правильно. Проверка паспорта выполняется, и метод authroute также выполняется.
Моя проблема в том, что myGetterMethod нет.
Я подозреваю, что при инкапсуляции passport.authenticate "возврат" не выполняется должным образом.
Как это должно быть реализовано? Ждите?
0 ответов
Я думаю тебе нужно позвонить next
в обратном вызове, потому что коа-паспорт остановит вызов next
когда вы предоставляете пользовательский обратный вызов
линия 94: вызов пользовательского обратного вызова всегда будет вызывать resolve(false)
строка 149: if resolve(cont !== false) call next
в результате использование пользовательского обратного вызова остановит цепочку. тебе нужно позвонить next
в вашем обратном вызове.