javascript - Cloud Functions for Firebase 上的 Passport.js 给出错误 "Cannot read property ' apply' of undefined"

标签 javascript node.js firebase passport.js google-cloud-functions

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

相关文章:

javascript - 如何设置 HTML 元素的样式以避免悬挂文本?

node.js - frisbyjs 对象数组

javascript - 将 Sails.js 应用程序部署到 dokku-alt?构建包错误

firebase_messaging 如何清除通知?

Swift & Firebase 无法将类型 'AuthDataResult?' 的值分配给类型“用户?

javascript - 当用户从 React Native 中的另一个页面导航回页面时,如何重新加载页面?

javascript - '时光倒流' xkcd

node.js - 无法使用 AngularFire 将 Firebase 功能更新到 Angular Universal 应用程序中的 Node 12

javascript - 附加 View 而不是在应用程序启动时显示它

javascript - 编辑以前保存的文档也会在数据库中更新它