我们有许多不懂技术的用户,他们发现使用常规的方法来更改他们的电子邮件是非常具有挑战性的(点击登录页面上的链接,输入他们的电子邮件,检查他们的收件箱,点击电子邮件中的链接来确认)。我们希望允许网站管理员能够直接更改电子邮件,而不需要用户做任何事情。
我知道这有一定的危险,但我们有适当的检查,以确保我们将使用正确的新电子邮件。
似乎,如果我有来自数据库的现有用户和来自管理页面上的<form>
的修改用户,我可以这样做…
existingUser.Email = modifiedUser.Email;
existingUser.NormalizedEmail = modifiedUser.Email.ToUpper();
existingUser.UserName = modifiedUser.Email;
existingUser.NormalizedUserName = modifiedUser.Email.ToUpper();
_appDbContext.Users.Update(existingUser);
await _appDbContext.SaveChangesAsync();
这似乎确实有效(有一个警告,见下文),但鉴于我从未见过推荐这样做,并且我见过的每个示例都创建了一个令牌并使用UserManager.SetEmailAsync
,我想知道我是否错过了一些东西。
让我更加怀疑的一个警告是,当我尝试上述操作时,它会创建一个与现有用户具有相同详细信息的新用户,但使用新的电子邮件。我不能复制这个,所以不能确定是什么原因导致的。
谁能评论一下处理这个问题的最好方法?谢谢。你可以设置和确认电子邮件不发送任何这样的电子邮件。使用ASP提供的UserManager
。. NET核心标识:
// set the email on the user, but don't send any email
await _userManager.SetEmailAsync(currentUser, newEmailAddress);
//generate an email confirmation token
var emailConfirmationToken = await _userManager.GenerateEmailConfirmationTokenAsync(existingUser);
//confirm the new email right away
result = await _userManager.ConfirmEmailAsync(existingUser, emailConfirmationToken);