Исходя из вашего вопроса, вы либо хотите авторизовать одно ИЛИ другое, либо проверить оба - я думаю, что вы спрашиваете, как выполнить аутентификацию отдельно (один ИЛИ другой, а не оба)?
обратите внимание, этот специфический c код не проверен, но принципы существуют и остаются в силе.
Один ИЛИ Другой
Вам необходимо определить название каждой стратегии в вашем паспортном коде.
Например:
passport.use('users', new LocalStrategy({
usernameField: 'user[email]',
passwordField: 'user[password]',
},(email, password, done) => {
Users.findOne({ email })
.then((user) => {
if(!user || !user.validatePassword(password)) {
return done(null, false, { errors: { 'email or password' : 'is valid' } });
}
return done(null, user);
}).catch(done);
}));
passport.use('hcpusers', new LocalStrategy({
usernameField: 'user[email]',
passwordField: 'user[password]',
},(email, password, done) => {
HCPUser.findOne({ email })
.then((user) => {
if(!user || !user.validatePassword(password)) {
return done(null, false, { errors: { 'email or password' : 'is valid' } });
}
return done(null, user);
}).catch(done);
}));
А затем в вашем методе passport.authenticate
укажите название стратегии:
passport.authenticate('users', function(err, user, info) { ...
и
passport.authenticate('hcpusers', function(err, user, info) { ...
В этом случае вам понадобятся две отдельные конечные точки для каждого метода входа в систему или просто дополнительный параметр, указывающий, какую из них проверять из оператора if.
Обновление
Для вашего комментария о незнании где должен быть код паспорта, это зависит от вас. Однако я хотел бы сохранить код паспорта в папке «auth» и добавить следующий код в паспорт. js file:
const mongose = require('mongoose');
const passport = require('passport');
const LocalStrategy = require('passport-local');
const Users = mongose.model('Users');
passport.use('...', new LocalStrategy({
...
...
}));
Включите его в свой сервер / index / app. js (независимо от того, что у вас есть) app.use(passport.initialize());
Затем вы можете просто использовать код паспорта как обычно в ваших пользовательских контроллерах.
Мой код passport.authenticate выглядит следующим образом:
return passport.authenticate('local', function(err, passUser, info) {
if (err) {
return next(err);
}
if (!passUser) {
return res.status(503).send('error');
}
const user = passUser;
user.token = user.generateJWT();
return res.json({ token: user.token });
})(req, res, next);
Но это может отличаться для вас (т. Е. Вы не используете сеансы?) В любом случае, если аутентифицировано, просто отправьте ответ клиенту, чтобы он мог продолжить.