Я относительно новичок в passportjs с помощью Express, и у меня есть вопрос относительно лучших практик для архитектуры моего приложения.
Во-первых, я хочу, чтобы пользователь мог делать следующее:
- Локальный вход/регистрация (имя пользователя, пароль)
- Google OAuth
Во-вторых, я хочу повторно использовать экземпляр класса ES6 всякий раз, когда пользователь делает вызов.
Пример:
Класс
class ImapConnector {
constructor(options) {
this.options = options;
this.imap = new IPromise(options);
}
connect() {
return this.imap.connectAsync();
}
getBoxes() {
return this.connect().then(() => new Promise((resolve, reject) => {
this.imap.getBoxes((err, boxes) => {
err ? reject() : resolve(boxes);
});
}));
}
}
Контроллер
function getBoxes(req, res) {
const options = {
user: req.user.email,
password: req.user.password,
host: req.user.email.host,
port: req.user.email.port,
tls: true,
mailbox: 'INBOX'
};
const imapConnector = new ImapConnector(options);
imapConnector.getBoxes().then((boxes) => {
res.status(200).send(boxes);
});
}
Как видите, вызов из контроллера в настоящее время создает экземпляр класса ImapConnector, который используется только внутри области действия функции контроллера. Очевидно, очень расточительный подход к памяти.
Теперь моя идея состоит в том, чтобы создать и сохранить экземпляр в сеансе экспресс-пользователя, поскольку экземпляр привязан к параметрам пользователя, таким как учетные данные для аутентификации imap. Таким образом, экземпляр находится вместе с истекающим сеансом.
Однако я не уверен, что это лучший и единственный способ.
Таким образом, у меня возникает вопрос: Каков наиболее разумный подход к использованию таких экземпляров, связанных с пользователем?
Я также мог бы подумать о сохранении этих экземпляров в моем mongodb (пользовательская схема), а затем удалить их вручную. При желании я бы предпочел обрабатывать состояние на стороне клиента (например, JWT).
Заранее спасибо!