Создание суб-пользователей с помощью passportJS | Создать другую стратегию или изменить текущую?
У меня есть базовое приложение, настроенное там, где пользователи регистрируются там, где их role
является company
тогда я хочу, чтобы компания создавала таких пользователей, как manager
, team lead
, hr
и т. д. Идея заключается в том, что суб-пользователи будут связаны с пользователем моей компании. В настоящее время у меня есть /register
Маршрут установлен для обработки начальной регистрации. Теперь я хочу иметь возможность установить newUser.role
сказать manager
а также newUser.companyID
в req.user.companyID
,
Я использую для этого passportJS и мне интересно, как мне следует изменить стратегию регистрации, чтобы справиться с этим, когда я собираюсь использовать /user/create
как мой второй маршрут POST, который будет использовать эту паспортную стратегию. Или мне лучше создать другую стратегию, которая будет обрабатывать этих суб-пользователей?
Стратегия регистрации паспорта:
passport.use('signup', new LocalStrategy({
usernameField: 'email',
passReqToCallback : true
},
function(req, email, password, done) {
User.findOne({ email: req.body.email }, function(err, existingUser) {
if(err){
console.log(err);
}
if (existingUser) {
req.flash('form', {
email: req.body.email
});
return done(null, false, req.flash('error', 'An account with that email address already exists.'));
}
// edit this portion to accept other properties when creating a user.
var user = new User({
email: req.body.email,
password: req.body.password, // user schema pre save task hashes this password
role: 'company'
});
user.save(function(err) {
if (err) return done(err, false, req.flash('error', 'Error saving user.'));
var token = new Token({ _userId: user._id, token: crypto.randomBytes(16).toString('hex') });
token.save(function (err) {
if (err) return done(null, false, req.flash('error', err.message));
var email = req.body.email;
// Send the email for the token
var message = 'Hello,\n\n' + 'Please verify your account by clicking the link: \nhttp:\/\/' + req.headers.host + '\/user/confirmation\/' + token.token + '\/' + email + '\n';
sendEmail('"Site name" noreply@domain.com', user.email, 'Account Verification Token', message);
});
var time = 14 * 24 * 3600000;
req.session.cookie.maxAge = time; //2 weeks
req.session.cookie.expires = new Date(Date.now() + time);
req.session.touch();
return done(null, user, req.flash('success', 'A verification email has been sent to ' + user.email + '. Verfication token expires in 12 hours.'));
});
});
})
);