0

在通过 Mongoose 创建用户帐户后尝试登录用户时出现未定义的函数错误...

TypeError: undefined is not a function
at /node_modules/passport/lib/passport/http/request.js:44:48
at pass (/node_modules/passport/lib/passport/index.js:240:14)
at Passport.serializeUser (/node_modules/passport/lib/passport/index.js:242:5)
at IncomingMessage.req.login.req.logIn (/node_modules/passport/lib/passport/http/request.js:43:29)
at Promise.<anonymous> (/routes/index.js:33:25)
at Promise.addBack (/node_modules/mongoose/lib/promise.js:120:8)

我在 routes/index.js 中的注册函数如下所示:

exports.register = function (req, res) {
// Generate salt
Common.bcrypt.genSalt(function(err, salt) {
    req.body.salt = salt;
    // Generate hash
    Common.bcrypt.hash(req.body.password, salt, function(error, hash) {
        req.body.hash = hash;
        // Remove clear text password
        delete req.body.password;
        // Save new user
        new Model.User(req.body).save(function(err, user) {
            console.log(err);
            console.log(req);
            if (user) {
                req.login(user);
                req.redirect('/');
            } else {
                res.json(false);
            }
        });

    });
 });

有任何想法吗?

4

1 回答 1

2

如果您查看node_modules/passport/lib/passport/http/request.js第 44 行第 48 列,您将看到done正在调用该函数。错误告诉你undefined is not a function, 所以done没有定义。如果您查看同一文件的第 29 行,您会看到这done是您应该传递给req.login函数的参数。换句话说,它期待一个回调,而您没有提供一个。也许是这样的:

if (user) {
  req.login(user, function(err) {
    if (err) {
      return req.send('FAILBOAT!');
    }
    return req.redirect('/');
  });
}

虽然我使用护照,但我不req.login直接打电话,所以我不能 100% 确定上面代码的含义。我还要指出,我在我的用户模型中做了所有 bcrypt 的东西,这似乎是解决问题的那个方面的一种更简洁的方法。

于 2012-11-08T21:58:04.090 回答