这是使用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来更新它们。但这与现有代码不一致。