Внедрение социальной аутентификации III
Напомним, что этот проект строится на следующем стартовом проекте Glitch или клонируется из GitHub . Конечной частью стратегии является обработка профиля, возвращенного из GitHub. Нам нужно загрузить объект базы данных пользователей, если он существует, или создать его, если это не так, и заполнить поля из профиля, а затем вернуть объект пользователя. GitHub предоставляет нам уникальный идентификатор в каждом профиле, который мы можем использовать для поиска, чтобы сериализовать пользователя (уже реализовано). Ниже приведен пример реализации, которую вы можете использовать в своем проекте: она входит в функцию, которая является вторым аргументом для новой стратегии, прямо под console.log(profile);
в настоящее время:
db.collection ( 'socialusers'). findAndModify ( {id: profile.id}, {}, {$ SetOnInsert: { id: profile.id, name: profile.displayName || 'Джон Доу', фото: profile.photos [0] .value || », email: profile.emails [0] .value || «Нет общедоступной электронной почты», created_on: новая дата (), провайдер: profile.provider || " } $ Установить: { last_login: новая дата () }, $ Вкл: { login_count: 1 }}, {upsert: true, new: true}, (err, doc) => { return cb (null, doc.value); } );С помощью findAndModify он позволяет вам искать объект и обновлять его, а также обновлять объект, если он не существует, и каждый раз получать новый объект обратно в нашей функции обратного вызова. В этом примере мы всегда устанавливаем last_login так же, как и сейчас, мы всегда увеличиваем значение login_count на 1, и только когда мы вставляем новый объект (новый пользователь), мы заполняем большинство полей. Также следует отметить использование значений по умолчанию. Иногда возвращаемый профиль не будет заполнен всей информацией или он будет выбран пользователем, чтобы оставаться закрытым; поэтому в этом случае мы должны обработать его, чтобы предотвратить ошибку. Теперь вы сможете войти в свое приложение - попробуйте! Представьте свою страницу, когда вы думаете, что у вас все в порядке. Если вы работаете в ошибки, вы можете проверить пример готового кода этого мини-проекта здесь .