Шаг 1 - нет причин сохранять пароль для подтверждения. это следует проверять только на стороне клиента.
Поэтому нам нужны только адрес электронной почты и пароль (хэшировано: пароль + соль [адрес электронной почты / идентификатор пользователя])
Убедитесь, что при регистрации пользователя вы проверяете электронную почту
Шаг 2 - должен быть индекс, скажем, 0 - не подписан, 1 - базовый, 2 - стандартный, 3 - премиум
Шаг 3 - Это лучше для вас не держать. просто используйте API онлайн-клиринга, чтобы получить платеж и подтверждение платежа.
Я бы добавил поля даты подписки. и дата истечения срока подписки.
удачи.
EDITED
let schema = new Schema({
email: { type: String, validate: validateEmail }, //The validate Email should be a function that get as value the email and return true or false if it is valid! (email format/not duplicated)
subscription: { type: Number },// 0-non. 1-basic, 2-standard, 3-premium (this will be set by the payment)
subscriptionDate: { type: Date },
subscriptionExpr: { type: Date }//This also will be set by the payment, and will be checked before any service giving. making sure the subscription is still valid.
});
Это самая основная форма схемы, которая вам нужна. Вы можете сделать его более сложным, сделав последние три поля в массиве для отслеживания прошлых планов подписки, которые были у пользователя или около того.