nodejのpassportjsとmongodbを使用した認証のための複数のローカル戦略を実装しています。認証を達成するために、私はdeserializeUserでミドルウェアを使用しました。このようなもの。私は2種類のユーザーを持っています.1つはユーザー、もう1つはベンダーです。ベンダーは製品を販売し、ユーザーは製品を購入します。 異なるローカル戦略名を持つベンダーやユーザー向けに異なるスキーマを作成しました。認証は私のために正常に動作します。mongodbとnodejsを使用したpassportjでの複数のローカル戦略の承認
module.exports = function(passport){
// Passport needs to be able to serialize and deserialize users to support persistent login sessions
passport.serializeUser(function(user, done) {
console.log('user id is: ' + user._id);
done(null, user._id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function (err, user) {
if(err)
done(err);
if(user) {
done(null, user);
}
else {
Vendor.findById(id, function (err, user) {
if(err)
done(err);
done(null, user);
});
}
});
});
である私は何をしたい、「ユーザー」アカウントは、ベンダーやベンダーがユーザーのためにそこにある、ページにアクセスできないようにする必要がありそこにあるページにアクセスできないようにする必要があり。このようにして、これらの2つのタイプのユーザーアカウントで共有されるデータに対するアクセス制御を提供したいと考えています。 私はパスポートでは不可能だと思うが、我々はそれのためのいくつかのミドルウェアを書く必要があります。私たちはいくつかのミドルウェアを通してそれを達成できますか?またはこの目的のために使用できるパッケージがnpmにありますか?誰かが単純なミドルウェアの例をいくつか挙げることができれば、本当に役に立ちます。
各タイプのユーザーに属性を追加し、その属性を調べてそのタイプを検出するのはなぜですか? –
Aᴍɪʀつまり、Userのスキーマでは、isUser:trueのようなフィールドを追加する必要があります。 Vendorスキーマでは、isVendor:trueのようなフィールドを追加する必要があります。それが本当ならば、ユーザーだけがアクセスできますか?それはあなたが意味することです。 –
種類...属性がすでに異なる場合は、その属性も使用できます。たとえば、ベンダーが 'vendor_id'を持っている場合、現在のユーザーにそれがあるかどうかを確認することができます。 –