8

Mongoose.js を使用して、私の認証メソッドはフィールド「companyRoles._company」にデータを入力しますが、req.user オブジェクトの同じデータが入力されたフィールドにアクセスしようとすると、入力されたデータは会社の参照 ID に戻ります。

//Authentication 
UserSchema.static('authenticate', function(email, password, callback) {
  this.findOne({ email: email })
  .populate('companyRoles._company', ['name', '_id'])
    .run(function(err, user) {
      if (err) { return callback(err); }
      if (!user) { return callback(null, false); }
      user.verifyPassword(password, function(err, passwordCorrect) {
        if (err) { return callback(err); }
        if (!passwordCorrect) { return callback(null, false); }
        return callback(null, user);
      });
    });
});

//login post
app.post('/passportlogin', function(req, res, next) {
  passport.authenticate('local', function(err, user, info) {
    if (err) { return next(err) }
    if (!user) { return res.redirect('/passportlogin') }
    req.logIn(user, function(err) {
      if (err) { return next(err); }
      console.log('req User');
      console.log(req.user); 
      return res.redirect('/companies/' + user.companyRoles[0]._company._id);
    });
  })(req, res, next);
});

app.get('/companies/:cid', function(req, res){
    console.log('req.user in companies:cid');
    console.log(req.user);   
});

req.logIn の後、req.user をログに記録すると、companyRoles{_company: [Object]} が表示されます。

しかし、ログイン後に /companys/:id ルートにリダイレクトすると、入力された [オブジェクト] ではなく ID が表示されます - companyRoles{_company: 4fbe8b2513e90be8280001a5}

フィールドに値が入力されていない理由について何か考えはありますか? ありがとう。

4

2 に答える 2

16

問題は、passport.deserializeUser 関数のフィールドに入力していなかったことです。更新された関数は次のとおりです。

//deserialize
passport.deserializeUser(function(id, done) {
    User.findById(id)
    .populate('companyRoles._company', ['name', '_id'])
    .run(function (err, user) {
        done(err, user);
     });
});
于 2012-06-12T19:24:48.660 に答える
0

res.redirectオブジェクトを文字列に連結して URL を作成しようとしているようです。それがあなたが望む結果になるとは思えません。URL はどのように表示されると思いますか?

于 2012-06-12T03:14:03.703 に答える