Дизайн схемы MongoDB для нескольких учетных записей пользователей с аутентификацией

Я собираюсь создать приложение node.js / express / mongoose / паспорт и Я думаю о правильном дизайне схемыдля пользователей и учетных записей.

Пользователи будут входить в систему из твиттера и фейсбука, а также из нативных учетных записей. На более позднем этапе я хочу, чтобы пользователь подключал обе твиттер и фейсбук с моим приложением (и, возможно, даже больше внешних аккаунтов).

Я не могу придумать хорошего решения для этой ситуации. Вот о Варианты, о которых я думаю:

1. Наличие модели профиля и модели аккаунта. Документы профиля представляют уникального пользователя, а учетная запись предоставляет либо имя пользователя и пароль (внутренняя учетная запись), либо данные аутентификации от поставщика аутентификации (внешняя учетная запись). Профиль должен иметь как минимум один вложенныйдокумент учетной записи.

var ExtAccountSchema = new Schema({
    type: String, // eg. twitter, facebook, native
    uid: String
});

var IntAccountSchema = new Schema({
    username: String,
    password: String
});

var ProfileSchema = new Schema({
    firstname: String,
    lastname: String,
    email: String,
    accounts: [Account] // Pushing all the accounts in there
});

Что мне не нравится в этом, так это несогласованность документов учетной записи, возникающих из-за разных данных учетной записи, и тот факт, что мне трудно найти нужную учетную запись, когда мой пользователь входит в систему (поиск uid и типов учетных записей во вложенных документах -.- )

2. Наличие всех данных в одной модели

var ProfileSchema = new Schema({
    firstname: String,
    lastname: String,
    email: String,        
    twitter-uid: String,
    facebook-uid: String
    password: String
});

Ну, это просто некрасиво --- Может быть, проще/быстрее найти нужные данные учетной записи, но поддерживать их неудобно.

Есть ли лучшее решение? Есть ли передовой опыт?

31
задан Cœur 22 August 2017 в 15:35
поделиться