Mongoose.jsを使用してmy authenticateメソッドがフィールド "companyRoles._company"にデータを入力しますが、データが入力されると会社参照IDに戻ります。私は自分のreq.userオブジェクトの同じ人口のフィールドにアクセスしようとしています。Passport.jsとMongoose.jsがログイン時にユーザーを占有する - req.userに入力されたフィールドが失われる
//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:[オブジェクト]}
しかし、私は/企業が/にリダイレクト場合:IDルートがログインした後、それが表示されていますidとしない人口[対象] - companyRoles {_company:4fbe8b2513e90be8280001a5}
任意のアイデアフィールドが取り込ま残っていない理由として?ありがとう。
ありがとうebohlmanは、あなたが正しいです。以前は_companyオブジェクトを設定していなかったときからリダイレクトURLを更新しませんでした。 _company._idを持つようにコードを更新しました。 –
しかし、問題はまだ残っています。/companies/{companyId}では、req.user.companyRoles [i] ._ companyはObjectIDであり、入力された_companyオブジェクト(名前、IDなど)ではありません。 Req.userがreq.logInコールバックにログインする際に、入力されたオブジェクトであることが奇妙です。 –
'/ companies /:companyId'を扱うコードを表示する必要があると思います。リダイレクト後、ブラウザは完全に新しいリクエストを作成し、元の 'req'オブジェクトに設定したプロパティは自動的に新しいものに存在しません。 – ebohlman