2012-06-12 9 views
8

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}

任意のアイデアフィールドが取り込ま残っていない理由として?ありがとう。

答えて

12

問題は、私はpassport.deserializeUser機能のフィールドを移入されなかったということでした、ここで更新機能である:

//deserialize 
passport.deserializeUser(function(id, done) { 
    User.findById(id) 
    .populate('companyRoles._company', ['name', '_id']) 
    .run(function (err, user) { 
     done(err, user); 
    }); 
}); 
0

res.redirectのように、オブジェクトを文字列に連結してURLを作成しようとしています。私はそれがあなたが望む結果を持つことは疑う。 URLがどのように見えると思いますか?

+0

ありがとうebohlmanは、あなたが正しいです。以前は_companyオブジェクトを設定していなかったときからリダイレクトURLを更新しませんでした。 _company._idを持つようにコードを更新しました。 –

+0

しかし、問題はまだ残っています。/companies/{companyId}では、req.user.companyRoles [i] ._ companyはObjectIDであり、入力された_companyオブジェクト(名前、IDなど)ではありません。 Req.userがreq.logInコールバックにログインする際に、入力されたオブジェクトであることが奇妙です。 –

+0

'/ companies /:companyId'を扱うコードを表示する必要があると思います。リダイレクト後、ブラウザは完全に新しいリクエストを作成し、元の 'req'オブジェクトに設定したプロパティは自動的に新しいものに存在しません。 – ebohlman

関連する問題