【问题标题】:Define passport strategy in a separate file and use it across the app在单独的文件中定义护照策略并在整个应用程序中使用它
【发布时间】:2020-10-14 05:41:22
【问题描述】:

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

我有一个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 中定义的具有策略的护照对象如何在不同的文件中使用。

任何帮助都会很棒!

【问题讨论】:

    标签: typescript express passport.js passport-google-oauth


    【解决方案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')}));
    

    希望这会有所帮助!

    【讨论】:

    • 感谢您回复@Naresh!我有一个问题,对于所有路线,我都必须导入 passport.ts 文件吗?即,authenticate.ts 文件如何访问带有 google 策略的护照对象?
    猜你喜欢
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 2022-12-19
    • 2021-05-12
    • 2021-02-11
    • 2014-11-11
    • 2021-07-07
    • 2018-06-30
    相关资源
    最近更新 更多