我有一个用例,我需要确认同一用户的两个电子邮件 ID。asp.net 核心中,我们有内置的GenerateChangeEmailTokenAsync和ConfirmEmailAsync方法,可用于确认一个电子邮件ID。
有没有办法另外确认一个?我在网上搜索,但找不到任何参考资料。
我知道我可能不得不为此扩展上述方法。但是,有没有更简单的方法可以做到这一点,以便我可以使用现有的标识框架扩展来实现我的用例?
我已经实现了这样的多电子邮件验证:电子邮件是身份核心处理的主要电子邮件,我有一个额外的登录电子邮件添加到应用程序用户 生成电子邮件令牌:
if (!user.EmailConfirmed)
{
//send token for email confirmation
var token = await _userManager.GenerateEmailConfirmationTokenAsync(user);
var confirmationLink = Url.Action(nameof(ConfirmEmail), "Account", new { token, id = user.Id, email = user.Email }, Request.Scheme);
var message = new EmailMessage(user.Email, "Confirmation email link", confirmationLink);
await _emailService.SendMail(message);
}
if (!user.LoginEmailConfirmed)
{
var token1 = await _userManager.GenerateUserTokenAsync(user, "Default", "Confirmation");
var confirmationLoginEmailLink = Url.Action(nameof(ConfirmEmail), "Account", new { token = token1, id = user.Id, email = user.LoginEmail, }, Request.Scheme);
var message = new EmailMessage(user.LoginEmail, "Confirmation email link", confirmationLoginEmailLink);
await _emailService.SendMail(message);
}
确认部分:首先我检查要确认的电子邮件是否是登录电子邮件,然后我使用验证用户令牌异步方法来验证令牌
if (user.LoginEmail == email)
{
var confirmationResult = await _userManager.VerifyUserTokenAsync(user, "Default", "Confirmation", token);
if (confirmationResult)
{
user.LoginEmailConfirmed = true;
var updateResult = await _userManager.UpdateAsync(user);
return View(updateResult.Succeeded ? nameof(ConfirmEmail) : "Error", new ConfirmEmailViewModel() { EmailConfirmed = user.EmailConfirmed, LoginEmailConfirmed = user.LoginEmailConfirmed, LoginUrl = _config.Value.ClientUrl });
}
else
{
return View("Error");
}
}
else {
var result = await _userManager.ConfirmEmailAsync(user, token);
return View(result.Succeeded ? nameof(ConfirmEmail) : "Error", new ConfirmEmailViewModel() { EmailConfirmed = user.EmailConfirmed, LoginEmailConfirmed = user.LoginEmailConfirmed, LoginUrl = _config.Value.ClientUrl });
}