ASP.NET Identity: обновление внешних утверждений после авторизации

Я использую ASP.NET Identity с несколькими внешними провайдерами входа, и мне нужно обработать следующий сценарий:

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

2) Мне нужно хранить эту информацию в приложении Db, для следующих сценариев:

Администратор просматривает список зарегистрированных пользователей

Служба электронной почты будет использовать имена и фамилии

...

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

Вот код того, как он сохраняется в первый раз:

Класс расширенной заявки:

public class ApplicationUserClaim : IdentityUserClaim<Guid>
{
    public string Issuer { get; set; }
    public string ClaimValueType { get; set; }
}

Запускать:

var facebookOptions = new FacebookAuthenticationOptions {
    AppId = "...",
    AppSecret = "...",
    Provider = new FacebookAuthenticationProvider {
        OnAuthenticated = (context) => {
            context.Identity.AddClaims(new[] {
                new Claim("LastName", context.User["last_name"].ToString(), ClaimValueTypes.String, "Facebook"),
                new Claim("FirstName", context.User["first_name"].ToString(), ClaimValueTypes.String, "Facebook"),
                //...Other claims
            });
        }
    }
};

facebookOptions.Scope.Add("email");
facebookOptions.Scope.Add("user_birthday");

app.UseFacebookAuthentication(facebookOptions);

AuthController

Внешний логин обратного вызова:

public ActionResult ExternalLogin(string returnUrl)
{
    var loginInfo = authenticationManager.GetExternalLoginInfo();

    //No user found - this is the first login with an external service
    //Asking to confirm an external account
    if(signInStatus == SignInStatus.Failure)
        return View("ExternalLoginConfirmation", new ExternalLoginConfirmationViewModel { ... });    
}

Создание пользователя после подтверждения внешнего входа (без использования другого кода):

public ActionResult ExternalLoginConfirmation(ExternalLoginConfirmationViewModel loginConfirmationViewModel)
{
    var loginInfo = authenticationManager.GetExternalLoginInfo();

    var user = new ApplicationUser();

    user.Logins.Add(new RegisteredUserLogin {
        LoginProvider = loginInfo.Login.LoginProvider,
        ProviderKey = loginInfo.Login.ProviderKey
    });

    //Converting Claims added in OnAuthenticated callback to ApplicationClaim objects to store them in Db
    foreach(var userInfoClaim in loginInfo.GetUserInfoClaims())                        
        user.Claims.Add(ClaimsHelper.ToUserClaimObject(userInfoClaim));

    userManager.Create(user);
}

Это работает нормально, но я застрял с обновлением значений входящих претензий после того, как пользователь Facebook возвращается. Каков истинный способ справиться с такой ситуацией? Спасибо.

Ответы на вопрос(1)

Ваш ответ на вопрос