在单独的文件中定义通行证策略并在整个应用程序中使用它
Define passport strategy in a separate file and use it across the app
我已经尝试了很长时间,但我似乎无法理解它是如何工作的。
我有一个 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 中使用该策略定义的护照对象如何在不同的文件中使用。
任何帮助都会很棒!
据我了解,您想在单独的文件中定义护照策略并使用它们。为此你可以做这样的事情
创建一个文件来定义您的策略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')}));
希望对您有所帮助!
我已经尝试了很长时间,但我似乎无法理解它是如何工作的。
我有一个 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 中使用该策略定义的护照对象如何在不同的文件中使用。
任何帮助都会很棒!
据我了解,您想在单独的文件中定义护照策略并使用它们。为此你可以做这样的事情
创建一个文件来定义您的策略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')}));
希望对您有所帮助!