Я пытаюсь настроить стратегию аутентификации Facebook в своем приложении, используя Passport.js, Express и TypeScript.Я смог понять поток данных процесса благодаря этой статье от Hacker Noon .
Но когда дело доходит до функции обратного вызова проверки, все становится немного хлопотно.Мне нужно проверить, вошел ли пользователь в систему, поэтому необходим доступ к объекту Request.Я проверил в passport-facebook
модульной документации, что passReqToCallback: true
можно установить в параметрах стратегии, чтобы включить это.
Однако, когда я передаю параметр req
в функцию обратного вызова, компилятор выдаетследующая ошибка:
Argument of type '(req: Request, accessToken: string, _refreshToken: string, profile: Profile, done: any) => void' is not assignable to parameter of type 'VerifyFunction'.
Просматривая определения типов модуля Passport.js, я нашел это:
export type VerifyFunction =
(accessToken: string, refreshToken: string, profile: Profile, done: (error: any, user?: any, info?: any) => void) => void;
export type VerifyFunctionWithRequest =
(req: express.Request, accessToken: string, refreshToken: string, profile: Profile, done: (error: any, user?: any, info?: any) => void) => void;
export class Strategy implements passport.Strategy {
constructor(options: StrategyOptionWithRequest, verify: VerifyFunctionWithRequest);
constructor(options: StrategyOption, verify: VerifyFunction);
name: string;
authenticate(req: express.Request, options?: object): void;
}
Итак, теоретически, объявление
new Strategy(fbConfig, (req: Request, accessToken: string, _refreshToken: string, profile: Profile, done: any) => { ... });
должен быть принят без проблем.
Вот полная fbConfig
декларация:
const fbConfig = {
clientID: "",
clientSecret: "",
callbackURL: "",
passReqToCallback: true,
profileFields: [
"id",
"name",
"birhday",
"gender",
"email",
"location",
"hometown"
]
};
И мой tsconfig.json
:
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"strict": true,
"noImplicitAny": true,
"esModuleInterop": true,
"baseUrl": ".",
"outDir": "dist",
"paths": {
"@models/*": ["./src/models/*"],
"@configs/*": ["./src/configs/*"],
"@controllers/*": ["./src/controllers/*"]
}
},
"include": ["src/**/*"],
"exclude": ["node_modules"]
}
Если бы кто-нибудь мог помочь мне с этим, я был бы очень благодарен!