Пожалуйста, помогите мне понять, что здесь происходит ...
У меня есть модель Mongoose, подключенная к passport-local-mongoose:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const passportLocalMongoose = require('passport-local-mongoose');
var UsersSchema = new Schema({
email: String,
password: String
})
UsersSchema.plugin(passportLocalMongoose, {
usernameField: 'email'
})
module.exports = mongoose.model('Users', UsersSchema)
Затем у меня есть экспрессМаршрутизатор определен как:
usersRouter.use(bodyParser.json())
usersRouter.route('/register')
.post(
Validate.registerUserReq, // nothing relevante here
Controller.registerUser,
Controller.respond // nothing relevante here
)
И Controller.registerUser:
const _registerUser = asyncMiddleware( async (req, res, next) => {
const registerUser = (newUser) => {
let password = req.password
return new Promise((resolve, reject) => {
Users.register(newUser, password, function(err, user) {
if (err) reject(err)
let userObj = {
"email": user.email,
"_id": user._id
}
user.tempToken = Verify.getToken(userObj, REGISTRATION_TOKEN_TIME)
user.save(function(err,user) {
if (err) reject(err)
resolve(user)
})
})
})
}
const sendConfirmationEmail = (email) => {
return new Promise((resolve, reject) => {
//passport.authenticate('local')(req, res, function () {
passport.authenticate('blablabla', { session: false })(req, res, function () {
// send email...
})
let newUser = new Users ({
email: req.email
})
let user = await registerUser(newUser)
let email = user.email
res.result = await sendConfirmationEmail(email)
next()
})
Мои сомнения:
В моих тестах япросто вызываю конечную точку, и она работает.Я НЕ настраиваю passport.use ('local', User.createStrategy ()) (ни blablabla
).Я НЕ вызываю app.use (passport.initialize ()).
Видите строку, где я использую passport.authenticate('blablabla',
?Кажется, не имеет значения, какую нить я положил туда ... И она проходит.Но я думаю, что не должно, верно?
Я использую аутентификацию на основе токенов и, следовательно, я не использую сеанс или сериализацию / десериализацию.Но разве я не должен определять стратегию и инициализировать паспорт?!
Моя конечная цель - найти способ использования двух разных коллекций для аутентификации пользователей.Итак, следил за этим вопросом , и я думал, что смогу сделать что-то вроде:
passport.use('user1-local', Users1.createStrategy())
passport.use('user2-local', Users2.createStrategy())
И затем позвонить passport.authenticate('user1-local', ...
Но потом, когда я начал играть сНазвание стратегии, я был удивлен, что, кажется, это не имеет значения.Из-за этого я даже не пытался использовать две коллекции.
Может кто-нибудь помочь мне, пожалуйста, понять, что происходит и как я могу использовать passport / passport-local-mongoose с двумя разными коллекциями одновременно?
Обновление:
Итак, я только что изменил passport.authenticate call на это:
passport.authenticate('user-local', { session: false }, function (err, user, info) {
// ...
})(req, res, next)
И теперь это не воссоздание «блаблабла», как я ожидал.И потом, это работает, когда я использую:
passport.use('blablabla', Users.createStrategy())
app.use(passport.initialize())
Я догадываюсь, что это решает проблему аутентификации с 2 коллекциями.
... Но все же, я не знаю, почему это былопереходя с предыдущего звонка.Буду признателен, если кто-нибудь сможет объяснить.