ASP.NET Core,电子邮件确认令牌在我生成后立即无效?

问题描述 投票:0回答:1

我有这个代码:

user.Email = customer.Email;
//user.UserName = customer.Email;
//user.NormalizedEmail = customer.Email.ToUpper();
//user.NormalizedUserName = customer.Email.ToUpper();
//user.EmailConfirmed = false;

//await _userManager.UpdateSecurityStampAsync(user);

await _userManager.UpdateAsync(user);

var token = await _userManager.GenerateChangeEmailTokenAsync(user, customer.Email);

var result = await _userManager.ConfirmEmailAsync(user, token);

为什么是

result.Suceeded == false
,原因是“无效令牌”?

ChatGPT 说这是因为令牌在下一行代码被命中之前就过期了,或者我没有处理令牌并且它被损坏了..或者其他一些建议,例如令牌存储/修改或错误的用户。没想到就是这样..:-)

哦,我已经尝试过将所有注释掉的代码行都注释掉,我所做的一切似乎都不会生成有效的令牌。

显然,我计划通过电子邮件将其发送给某人,让他们单击带有该令牌的链接并让其确认...但是,这不起作用,因为令牌无效,所以我想我应该隔离它几行代码。

还尝试从 User 对象传递

normalizedEmail
而不是
customer.Email

以前,该人直接在

aspnetUsers
表上进行数据库更新以设置电子邮件和用户名,但这也不起作用。

这是有效的(或者至少,QA 已经签署了它),但是编写代码的人已经不在这里了,我正在尝试找出为什么它现在不起作用......

哦,我还尝试从

_userManager
获取用户以用于生成令牌..没有运气。

c# asp.net-core asp.net-core-identity
1个回答
0
投票

我发现使用这个所谓的错误令牌(ConfirmEmailAsync 返回错误令牌),我可以调用:ChangeEmailAsync () 并且它会成功返回!因此,我非常确定,无论文档如何说明,ConfirmEmailAsync() 仅适用于当您创建新电子邮件地址并想要验证它时,由验证电子邮件 API 创建的验证令牌。

更改代码以在单击链接之前不更改电子邮件,然后使用上述 API 更改它似乎是解决方案。我认为前一个人的设计不会起作用,因为令牌对于该 API 调用始终被认为是无效的。

© www.soinside.com 2019 - 2024. All rights reserved.