过去几天我一直在尝试在 Firebase 云功能上集成 Passport.js Gitlab oAuth。我收到一个很难调试的错误。您能否帮助我了解实际失败的原因以及如何解决?
Error :
TypeError: Cannot read property 'apply' of undefined
at Immediate.<anonymous> (/user_code/node_modules/express/lib/router/index.js:635:14)
at runCallback (timers.js:639:20)
at tryOnImmediate (timers.js:610:5)
at processImmediate [as _immediateCallback] (timers.js:582:5)
这是整个函数。正在使用的 Passport 库是 https://github.com/gtanner/passport-gitlab
var functions = require('firebase-functions');
// Firebase Setup
const admin = require('firebase-admin');
const passport = require('passport');
const session = require('express-session');
const express = require('express');
const cors = require('cors')({
origin: true
});
const router = new express.Router();
router.use(cors);
const FirebaseStore = require('connect-session-firebase')(session);
const GitLabStrategy = require('passport-gitlab').Strategy;
const serviceAccount = require('./service-account.json');
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: `https://${process.env.GCLOUD_PROJECT}.firebaseio.com`
});
router.use(session({
store: new FirebaseStore({
database: admin.database(),
}),
secret: 'myapp',
resave: false,
saveUninitialized: true
}));
router.use(passport.initialize());
router.use(passport.session());
passport.serializeUser(function(user, done) {
console.log('serialize', user);
done(null, user);
});
passport.deserializeUser(function(obj, done) {
console.log('deserialize', obj);
done(null, obj);
});
passport.use(new GitLabStrategy({
clientID: '',
clientSecret: '',
callbackURL: "https://us-central1-auth-fa8a7.asd.net/api/gitlabCallback"
},
function(accessToken, refreshToken, profile, cb) {
console.log('accessToken ', accessToken)
console.log('refreshToken ', refreshToken)
console.log('refreshToken ', profile)
cb(null, profile);
}
));
router.get('/gitlab', passport.authenticate('gitlab'));
router.get('/gitlabCallback', passport.authenticate('gitlab', {
successRedirect: '/',
failureRedirect: '/login'
}));
exports.api = functions.https.onRequest(router);
最佳答案
有一个类似的问题,我通过初始化路由器解决了它
const router = new express();
而不是
const router = new express.Router();
关于javascript - Cloud Functions for Firebase 上的 Passport.js 给出错误 "Cannot read property ' apply' of undefined",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44782996/