#javascript #node.js #mongodb #passport.js
Вопрос:
Я использую Passport Local Mongoose для создания пользователя в своей базе данных. Моя цель-разрешить пользователям с одинаковым именем пользователя регистрироваться в моем приложении. В ходе моего исследования я обнаружил, что если я передам объект в качестве опции в своем плагине Schema.plugin с ‘usernameUnique: false’, я разрешу пользователям регистрироваться под тем же именем пользователя. Единственная проблема в том, что когда я пытаюсь зарегистрироваться, я получаю ошибку «UserExistsError» на своей консоли.
const mongoose = require('mongoose'); const Schema = mongoose.Schema; const passportLocalMongoose = require('passport-local-mongoose'); const UserSchema = new Schema({ email: { type: String, required: true, }, username: { type: String, required: true, unique: false }, }); const options = { usernameUnique: false, } UserSchema.plugin(passportLocalMongoose, options); const User = mongoose.model('User', UserSchema); module.exports = User;
Комментарии:
1. Похоже, функция поиска проверяет пользователя по имени пользователя, поэтому вам придется либо удалить эту проверку, либо проверить на основе другого набора критериев. Почему вы хотите разрешить нескольким пользователям использовать одно и то же имя пользователя? С точки зрения системного проектирования это нецелесообразно.
2. Я не понимал, что в паспорте используется поле имени пользователя для входа каждого пользователя. На мой взгляд, для входа в систему я бы использовал электронную почту и пароль для входа пользователя в приложение (я уже принял меры предосторожности, чтобы не регистрировать одни и те же электронные письма).
3. Похоже
passport-local-mongoose
, что требуетсяusername
одно из уникальных полей поиска, поэтому имена пользователей должны быть уникальными. Аутентификация паспорта основана вокругusername and password
, в отличие отemail and password
. Однако существуют и другие библиотеки аутентификации js, которые позволяютemail and password
…