1)在用户注册表中保存默认角色:数据库中的'客户'
2)在管理员注册表中保存默认角色:数据库中的'admin'
[Note- If you use mongodb as a database in registration schema make-
role:{
type: String,
default: 'customer' or 'admin' //Manage respectively
},
Important- 'This uses cookie for session login'
'You can do this on your own way :)']
对于策略
passport.use('user-local',
new LocalStrategy({ usernameField: 'phone', passwordField: 'password' },
(phone, password, done) => {
// Match user
User.findOne({
phone: phone
}).then(user => {
if (!user) {
return done(null, false, { message: 'The phone not registered' });
}
// Match password
bcrypt.compare(password, user.password, (err, isMatch) => {
if (err) throw err;
if (isMatch) {
return done(null, user);
} else {
return done(null, false, { message: 'Password incorrect' });
}
});
})
.catch(err => console.log(err));
})
);
passport.use('admin-local',
new LocalStrategy({ usernameField: 'phone', passwordField: 'password' },
(phone, password, done) => {
// Match user
Admin.findOne({
phone: phone
}).then(user => {
if (!user) {
return done(null, false, { message: 'The phone not registered' });
}
// Match password
bcrypt.compare(password, user.password, (err, isMatch) => {
if (err) throw err;
if (isMatch) {
return done(null, user);
} else {
return done(null, false, { message: 'Password incorrect' });
}
});
})
.catch(err => console.log(err));
})
);
用于序列化
passport.serializeUser((user, done) => {
done(null, { _id: user.id, role: user.role });
});
用于反序列化
passport.deserializeUser((login, done) => {
if (login.role === 'customer') {
User.findById(login, function (err, user) {
if (user)
done(null, user);
else
done(err, { message: 'User not found' })
});
}
else if (login.role === 'admin') {
Admin.findById(login, (err, admin) => {
if (admin)
done(null, admin);
else
done(err, { message: 'Admin not found' })
});
}
else {
done({ message: 'No entity found' }, null);
}
});