WebApi 2 Изменение от Google Authentication OpenID - > oAuth2-изменение дескриптора безопасности


Когда я начинал свой проект, Google разрешил использовать OpenID там, где не требовалось никакой реальной регистрации.. Теперь это уходит, и я перенес проект на новый meths.. НО Проблема заключается в том, что пользователи получат новый маркер безопасности и будут видеть пользователя как нового пользователя.

Кто-нибудь из вас решил, что мне не нужно просить всех пользователей создавать новые учетные записи, а затем связывать старые учетные записи с новыми учетными записями?

1 2

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, или просто сделать, как я делаю, и посмотреть его в свой собственный объект администратора пользователя