ASP.NET Core 2.0:如何更新IDentityUser的扩展属性?

时间:2018-05-31 06:38:35

标签: asp.net-identity

这是使用ASP.NET Core Web Application MVC Template创建的项目。已选择“个人”进行身份验证。

我扩展IDentityUser以添加Title,Institution,FirstName LastName等属性。我可以使用这些扩展属性注册新用户。但是我也希望用户能够在登录后更新这些属性。

IDentityUser的原始属性,如PhoneNumber,使用下面的脚手架代码更新。

var phoneNumber = user.PhoneNumber;
if (model.PhoneNumber != phoneNumber)
{
    var setPhoneResult = await _userManager.SetPhoneNumberAsync(user, model.PhoneNumber);
    if (!setPhoneResult.Succeeded)
    {
        throw new ApplicationException($"Unexpected error occurred setting phone number for user with ID '{user.Id}'.");
    }
}

似乎我还需要扩展UserManager来创建像

这样的函数
setTitleAsync(TUser user, string title);
setInstitutionAsync(TUser user, string instituion);
setFirstNameAsync(TUser user, string firstName);
setLastNameAsync(TUser user, string lastName);

我检查了.NET Core 1.0的源代码,SetPhoneNumberAsync的实现是这样的:

    ThrowIfDisposed();
    var store = GetPhoneNumberStore();
    if (user == null)
    {
        throw new ArgumentNullException(nameof(user));
    }
    await store.SetPhoneNumberAsync(user, phoneNumber, CancellationToken);
    await store.SetPhoneNumberConfirmedAsync(user, false, CancellationToken);
    await UpdateSecurityStampInternal(user);
    return await UpdateUserAsync(user);

我认为这对于这样一个共同的请求来说太复杂了。此外,我也不知道xxxStore的用途。

任何人都有处理这个问题的经验吗?非常感谢。

更新这些属性的另一种方法是直接访问DB来更新它们。但这与现有代码不一致。

0 个答案:

没有答案