Создание суб-пользователей с помощью passportJS | Создать другую стратегию или изменить текущую? - PullRequest
0 голосов
/ 28 августа 2018

У меня есть базовое приложение, в котором пользователи регистрируются, где их 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.'));
          });
        });

    })
  );
...