WebApi 2 Изменение от Google Authentication OpenID - > oAuth2-изменение дескриптора безопасности
Когда я начинал свой проект, Google разрешил использовать OpenID там, где не требовалось никакой реальной регистрации.. Теперь это уходит, и я перенес проект на новый meths.. НО Проблема заключается в том, что пользователи получат новый маркер безопасности и будут видеть пользователя как нового пользователя.
Кто-нибудь из вас решил, что мне не нужно просить всех пользователей создавать новые учетные записи, а затем связывать старые учетные записи с новыми учетными записями?
1 ответ:
Я решил, что электронная почта Google может быть моей ссылкой на существующих пользователей. Если вы используете стандартную реализацию Identity в ASP.NET/WEBAPI затем измените: AccountControler.cs-ExternalLoginCallback
Что это делает, чтобы посмотреть электронную почту, если пользователь Google не существует и добавить логин для существующего пользователя, как это:
// Sign in the user with this external login provider if the user already has a login var user = await UserManager.FindAsync(loginInfo.Login);
Вставить:
//Google Migration. If not existing then check if the Google email exists and if it does the change the LoginProvider key and try to login again if (user == null && loginInfo.Login.LoginProvider == "Google" && email != "") { xxxEntities db = new xxxEntities(); var existingUser = db.user_profiles.Where(e => e.eMail == (string)email).Where(p => p.created_from == "Google"); if (existingUser.Count() > 0) { var existingID = existingUser.Single().userFK; var result = await UserManager.AddLoginAsync(existingID, loginInfo.Login); if (result.Succeeded) { //Now retry the check if the user with this external login provider if the user already has a login user = await UserManager.FindAsync(loginInfo.Login); } } }
Сюда:
//Now for the normal Check if (user != null) {
Пожалуйста, обратите внимание, что поиск некоторых внутренних объектов у меня есть, это может быть сделано в Реализация OOTB путем добавления поиска электронной почты в UserManager, или просто сделать, как я делаю, и посмотреть его в свой собственный объект администратора пользователя