Passport.js on Cloud Functions for Firebase 给出错误"Cannot read property 'apply' of undefined"



我一直在尝试在过去的几天内在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)

这是整个功能。所使用的护照库是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();

firebase cloud函数的日志并不总是可靠的。我遇到了同样的问题,在调试时发现错误是由于未定义的变量引起的。有一个未定义的json,并试图访问未定义的JSON的键。我建议以这种方式检查。

相关内容

最新更新