@types/ паспорт версии 1.0.5 генерирует новую ошибку: Type Authenticator не удовлетворяет ограничению IncomingMessage
У меня есть веб-приложение Koa.JS, которое использует Passport.JS для аутентификации oAuth2. Это веб-приложение написано на машинописном тексте. Вот код аутентификации:
import { deserializeUser, serializeUser, use } from 'koa-passport';
import { Strategy, VerifyCallback } from 'passport-oauth2';
import config from 'config';
import { Authenticator } from 'passport';
const OAuth2Strategy = Strategy;
use(
new OAuth2Strategy(
config.get('oauth2'),
(accessToken: string, refreshToken: string, profile: any, done: VerifyCallback): void =>
{
if (accessToken && refreshToken) {
const tokens = { access_token: accessToken, refresh_token: refreshToken };
done(null, tokens);
} else {
done(undefined, undefined, { message: 'An error occurred!' });
}
}
)
);
serializeUser<Authenticator, Authenticator>(
(user: Authenticator, done: (err: any, id?: Authenticator | undefined) => void): void => {
done(null, user);
}
);
Веб-приложение отлично компилируется с @ types / паспорт 1.0.4, но генерирует новую ошибку, когда я обновляю версию @ types / паспорт до 1.0.5.
Type 'Authenticator<Handler, any, any, AuthenticateOptions>' does not satisfy the constraint 'IncomingMessage'.
Type 'Authenticator<Handler, any, any, AuthenticateOptions>' is missing the following properties from type 'IncomingMessage': aborted, httpVersion, httpVersionMajor, httpVersionMinor, and 45 more.
serializeUser<Authenticator, Authenticator>
Кто-нибудь испытал это?
1 ответ
Возможно изменение интерфейса Authenticator? ЧТО ВЫ ГОВОРИТЕ!? Да - изменение интерфейса с незначительным изменением номера версии !!!
Я ожидал, что интерфейс serializeUser из koa-паспорта, вероятно, не синхронизирован с обновлениями, сделанными в паспорте ... В моем мире критическое изменение интерфейса обычно означает изменение основной версии.
Как показано ниже, версия 1.0.4 Passport позволяет использовать общий TUser.
serializeUser<TUser, TID>(fn: (user: TUser, done: (err: any, id?: TID) => void) => void): void;
Теперь с V1.0.5 паспорта интерфейс изменен, чтобы ограничить Express.User.serializeUser(fn: (user: Express.User, выполнено: (err: any, id?: TID) => void) => void): void;