Интересно, что лучше всего попросить пользователя получить дополнительную информацию для завершения регистрации после социального входа с помощью Passport. В настоящее время я могу успешно зарегистрировать пользователя через Twitter, и мой callback-маршрут '/ auth/twitter/callback' успешно вызван. Однако на данный момент я представляю форму, чтобы попросить у них еще несколько информационных материалов. Моя проблема заключается в том, что в этот момент req.IsAuthenticated() возвращает true уже, хотя я бы скорее установил IsAuthenticated вручную только после завершения регистрации, а не только после вызова обратного вызова twitter. Какие-либо предложения?Запросить полную регистрацию после регистрации в социальной сети через Passport
ответ
Есть несколько способов добиться того, что вы хотите сделать, и с моей точки зрения возиться с req.isAuthenticated()
не самый лучший. Я рекомендую следующие подходы.
Метод 1
В дополнение к req.isAuthenticated()
поставить новое условие, чтобы проверить, является ли завершена пользователь регистрации или нет, т.е. user.completedRegistration()
где completedRegistration()
это функция, которая проверяет, либо MongoDB или какой-либо другой логики, чтобы решить, да или нет. Образец следующим образом:
var isAuthenticated = function (req, res, next) {
if (req.isAuthenticated() && user.completedRegistration()) {
//user is both authenticated registered.
return next();
} else if (req.isAuthenticated() && !user.completedRegistration()) {
//user is only authenticated, need to fill the form.
res.redirect('/to/the/view/that/have/registration/form');
} else {
// user needs to login
res.redirect('/map/to/the/login/route/handler');
}
}
Вы, очевидно, будет использовать isAuthenticated в маршрутах, следующим образом:
// secure GET route
router.get('/secure/api/create', isAuthenticated, function(req, res) {
//return some secure view
});
user.completedRegistration()
может быть функцией, которая запрашивает, то MongoDB для зарегистрированного пользователя с помощью вошедшего в идентификатор пользователя (twitter id) и проверьте, установлено ли определенное поле. Вы устанавливаете это поле, когда пользователь регистрируется иначе по умолчанию, он может быть ложным.
Метод 2
В зависимости от упорядочивания ваших конфигов в app.js каждый запрос запускает deserializeUser, как показано ниже:
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
console.log('deserializing user:',user);
done(err, user);
});
});
Который берет идентификатор зарегистрированного пользователя из REQ объект и извлекает пользователя из mongodb и заполняет дополнительную информацию о пользователе в объекте req. Вы можете настроить этот метод на User.find
, используя не только идентификатор пользователя, но и поле, которое показывает, зарегистрирован пользователь или нет. Очевидно, вам нужно установить поле в пользовательском объекте mongodb и в модели User
.
Метод 3
Оставить в покое паспортной связанной конфига, напишите ваши собственные проверки на уровне маршрутизатора, чтобы проверить вошедший пользователь, зарегистрировано ли или нет. Вы можете сделать это, используя следующие шаги: доступ
- пользователя по определенному маршруту, и вы убедитесь, что он/она проходит проверку подлинности
- Вы получить идентификатор зарегистрированного пользователя
- Вы проверяете MongoDB или MySQL или redis или любую другую логику, которую вы можете реализовать, чтобы решить, завершил ли пользователь с этим идентификатором
- Если нет, то вы перенаправляете пользователя на страницу регистрации, если да, то вы даете запрос пользователю нормально обслуживаться.
Чтобы получить идентификатор зарегистрированного пользователя, вы можете проверить поле req.user
. Как показано в следующей функции, я реализовал twitter
, facebook
и local
и, следовательно, все мои чеки.
function getCurrentLoggedInUserId(req, callback) {
console.log('FUNC getCurrentLoggedInUserId');
var userId = "ghost";
if(req.user) {
if(req.user.local != undefined && req.user.local.email != undefined) {
userId = req.user.local.email;
} else if(req.user.fb != undefined && req.user.fb.id != undefined) {
userId = req.user.fb.id;
} else if(req.user.twitter != undefined && req.user.twitter.id != undefined) {
userId = req.user.twitter.id;
}
callback(null, userId);
} else {
callback(null, userId);
}
}
Есть много других способов добиться того, что вы просили здесь, но, что вам нужно сделать некоторое чтение на экспресс-приложения в сочетании с паспортной работы, и тогда вы получите представление о том, где перехватить пользователя запросы и какой подход подходит вам лучше всего.
- 1. визуализация социальной сети
- 2. География в социальной сети
- 3. Обход социальной сети в python
- 4. Строительство социальной сети
- 5. Уведомление о социальной сети Android
- 6. безопасности для социальной сети
- 7. «схема» для социальной сети
- 8. Задержка Загрузка социальной сети
- 9. Объектная модель социальной сети
- 10. Основные функции социальной сети
- 11. Аутентификация социальной сети через iframe вместо Pop Up
- 12. Делить modal в социальной сети
- 13. Взаимоотношения друга в социальной сети
- 14. Новости SilverStripe в социальной сети
- 15. OrientDB запрос друга друга в социальной сети
- 16. django-allauth: проверка электронной почты только на не социальной регистрации
- 17. Meteor: Дифференцирование входа и регистрации через социальные сети
- 18. Как сделать полную регистрацию Iframe/логин/Userpanel
- 19. Laravel 5.3 - сомнения в социальной регистрации
- 20. Сайт социальной сети: анонимный сначала, заявка позже
- 21. Как использовать регистрацию регистрации django?
- 22. Java framework для социальной сети
- 23. Как поддерживать сайт социальной сети?
- 24. Ресурсы для проектирования социальной сети?
- 25. Memcached для социальной сети приложений
- 26. MySQL Структура для социальной сети
- 27. Bootstrap для сайта социальной сети
- 28. Разработка для социальной сети RenRen
- 29. Модель данных для социальной сети?
- 30. Настройка высоты кнопки социальной сети
Все эти методы позволяют паспорту аутентифицировать пользователя, а затем зависеть от отдельной логики «завершенного реорганизации». Невозможно ли отсрочить аутентификацию до завершения регистрации? Так выглядит, как работает stackoverflow. –