asp.net 电子邮件确认-令牌无效

abithluo  于 2023-04-08  发布在  .NET
关注(0)|答案(1)|浏览(146)

在我的.Net Core 3.1项目中,有时候令牌是无效的。
根据这条线索:确认电子邮件上的ASP.NET核心标识令牌无效
我按照说明操作,因此我将SendConfirmationLink操作更改为:

var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
byte[] tokenGeneratedBytes = Encoding.UTF8.GetBytes(code);
var codeEncoded = WebEncoders.Base64UrlEncode(tokenGeneratedBytes);

var callbackURLRoute = Url.Action("RegisterStandartUser", "Account", new
                       {
                           userId = user.Id,
                           token = codeEncoded
                       });

var callbackURL = $"{HttpContext.Request.Scheme}://{HttpContext.Request.Host}{callbackURLRoute}";

await _mailService.SendConfirmationMailToStandartUser(user, callbackURL);

此邮件成功发送给用户后,一些用户可以确认其帐户,但其中一些用户收到此错误消息。
服务器端的错误是Invalid Token
我的RegisterUser操作(链接重定向到)如下:

var user = await _userManager.FindByEmailAsync(model.Email);
 if (user == null) { throw new Exception("Cannot find user!"); }

var codeDecodedBytes = WebEncoders.Base64UrlDecode(model.EmailToken);
var codeDecoded = Encoding.UTF8.GetString(codeDecodedBytes);

var emailConfirm = await _userManager.ConfirmEmailAsync(user, codeDecoded);

为什么我的应用程序有时接受这些令牌,有时不接受?
请帮帮我...

ni65a41a

ni65a41a1#

你必须创建这样的链接:

var confirmationLink = Url.Action("EmailConfirmation", "Account", new { email = user.Email, token = token }, Request.Scheme);

相关问题