Я реализую несколько локальных стратегий для аутентификации с использованием паспортов и mongodb в nodejs. Чтобы добиться аутентификации, я использовал промежуточное программное обеспечение в deserializeUser. Что-то вроде этого. У меня есть два типа пользователей: один - Пользователь, а другой - поставщик. Продавцы будут продавать товары, а пользователи будут покупать товары. Я создал другую схему для поставщиков и пользователей с разными именами локальных стратегий. Аутентификация работает отлично для меня.авторизация для нескольких локальных стратегий в passjs с использованием mongodb и nodejs
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);
});
}
});
});
То, что я хочу сделать это, учетная запись пользователя «» не должна быть в состоянии получить доступ к страницам, которые есть для продавцов и поставщики не должны быть в состоянии получить доступ к страницам, которые есть для пользователей. Таким образом, я хочу обеспечить контроль доступа к данным, которые совместно используются этими двумя типами учетной записи пользователя. Я думаю, что это невозможно с паспортом, но нам нужно написать для него какое-то среднее. Можем ли мы достичь этого через некоторое промежуточное ПО или есть какой-либо пакет в npm, который мы можем использовать для этой цели. Если кто-нибудь может привести примеры некоторых простых промежуточных программ, это будет действительно полезно для меня.
Почему вы не добавляете атрибут для каждого типа своих пользователей и не проверяете этот атрибут для определения их типа? –
Aᴍɪʀ Итак, вы имеете в виду, что в схеме для пользователя я должен добавить поле, такое как isUser: true; и в схеме поставщика я должен добавить поле, такое как isVendor: true. а затем, если это правда, то только пользователь может получить доступ? это то, что вы имели ввиду. –
Вид ... Я имею в виду, если атрибуты уже разные, вы также можете использовать это. Например, если у продавца есть 'vendor_id', вы можете проверить, есть ли у текущего пользователя это или нет. –