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

の 44 行目のnode_modules/passport/lib/passport/http/request.js48 列を見ると、関数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 に答える