0

我已经尝试了很长时间,但我似乎无法理解它是如何工作的。

我有一个passport.ts文件大致定义为:

passport.serializeUser<any, any>((user, done) => {
    done(undefined, 1);
});

passport.deserializeUser((id, done) => {
    done(null, 1);
});

// Strategy config
const GoogleStrategy = passportGoogle.Strategy
passport.use(new GoogleStrategy({
    clientID: config.get('googleAuth.clientID'),
    clientSecret: config.get('googleAuth.clientSecret'),
    callbackURL: config.get('googleAuth.callbackURL'),
    passReqToCallback: true
}, async (accessToken, refreshToken, profile, done)=> {
    return done
}))

在项目的根目录中,我有一个index.ts标准护照初始化:

app.use(passport.initialize());
app.use(passport.session());

我通过 express 的 Router 函数在不同的文件中定义控制器,其中之一authenticate.ts大致遵循以下几行:

import {Router} from 'express';
import passport from 'passport';
import config from 'config';
import * as passportConfig from '../utils/passport' //this is passport.ts which was pasted above
const router = Router();

router.get('/google', passport.authenticate('google', {scope: config.get('googleAuth.scope')}));

我知道我错过了回调路由,但是我在完成这项工作时遇到了问题,因为我不确定在 passport.ts 中定义的具有策略的护照对象如何在不同的文件中使用。

任何帮助都会很棒!

4

1 回答 1

1

据我了解,您想在单独的文件中定义您的护照策略并使用它们。为此,你可以做这样的事情

创建一个文件来定义您的策略google-strategy.ts

const googleStrategy = new GoogleStrategy({
    clientID: config.get('googleAuth.clientID'),
    clientSecret: config.get('googleAuth.clientSecret'),
    callbackURL: config.get('googleAuth.callbackURL'),
    passReqToCallback: true
}, async (accessToken, refreshToken, profile, done)=> {
    return done
})
module.exports = googleStrategy;

在你的passport.ts文件中

const googleStrategy = require('./google-strategy');
// giving a name to a strategy so we can refer it in routes
passport.use('MyGoogleStrategy', googleStrategy);

在你的authenticate.ts文件中

router.get('/google', passport.authenticate('MyGoogleStrategy', {scope: config.get('googleAuth.scope')}));

希望这可以帮助!

于 2020-06-24T07:09:32.600 回答