首页 > 解决方案 > 传递给函数后未定义的护照对象

问题描述

我在 app.js 中有以下代码:

const passport = require('passport');
const { initializePassport } = require('./passportConfig');
initializePassport(
    passport,
    email  => Account.find(user => user.email === email),
    id => Account.find(user => user._id === id)
);

初始化护照功能:

const LocalStrategy = require('passport-local').Strategy;
const bcrypt = require('bcrypt');

function initializePassport (passport, getUserByEmail, getUserById) {
    console.log(passport);
    const authenticateUser = async (email, password, done) => {
        const user = getUserByEmail(email);
        if(user == null) {
            return done(null, false, { message: "no user with given email" });
        }
        try {
            if(bcrypt.compare(password, user.password)) {
                return done(null, user);
            } else {
                return done(null, false, { message: "password incorrect" });
            }
        } catch(e) {
            return done(e);
        }
    }

    passport.use(new LocalStrategy({ usernameField: 'email'}, authenticateUser));
    passport.serializeUser((user, done) => done(null, user._id))
    passport.deserializeUser((id, done) => {
        return done(null, getUserById(id))
    })
}

module.exports = initializePassport();

我正在将我在 app.js 中声明的护照对象传递给 initializePassport 函数,但我收到以下错误:

passport.use(new LocalStrategy({ usernameField: 'email'}, authenticateUser));
         ^
TypeError: Cannot read property 'use' of undefined

为了验证该对象确实是未定义的,我对其进行了 console.log() 操作,果然,它打印了未定义的。如果我要注释掉 .use() 语句,在 .serializeUser() 函数上也会出现同样的错误。为什么护照对象未定义,如何将其传递给函数?

标签: javascriptnode.jspassport.js

解决方案


我仍然不知道究竟是什么导致了这个问题,但是将 initializePassport 定义移动到 app.js 解决了这个问题。


推荐阅读