首页 > 解决方案 > 为什么 ChangePhoneNumber 总是返回错误的代码?

问题描述

我正在尝试使用 UserManager 和 GenerateChangePhoneNumberTokenAsync 方法恢复密码。在尝试通过 ChangePhoneNumberAsync 确认该令牌后,但每次我收到有关错误代码的错误时。

我尝试了不同的条件,每次都收到相同的错误。

生成令牌

var token = await _userManager.GenerateChangePhoneNumberTokenAsync(user, model.Username);

确认令牌

var verified = await _userManager.ChangePhoneNumberAsync(user, model.Phone, model.Token);

启动.cs

services.AddIdentity<ApplicationUser, IdentityRole>(config =>
            {
                config.SignIn.RequireConfirmedEmail = true;
                config.SignIn.RequireConfirmedPhoneNumber = true;
                config.Tokens.ChangePhoneNumberTokenProvider = "Phone";
            })

电话和用户名是一样的。

 var user = new ApplicationUser
            {
                Email = $"{_templateCustomerEmail}{(_context.Users.Count() + 1)}@{_appSettings.Domain}",
                DateSignUp = DateTime.UtcNow,
                FullName = model.FullName,
                Id = Guid.NewGuid().ToString(),
                PhoneNumber = model.Username,
                EmailConfirmed = true,
                PhoneNumberConfirmed = false,
                UserName = model.Username
            };

我希望这些东西的设置非常容易。不幸的是,面临着一个虚拟的问题。也许问题出在方法名称或其他方面。

标签: c#asp.net.net-coreasp.net-identity

解决方案


https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.identity.usermanager-1.generatechangephonenumbertokenasync?view=aspnetcore-2.2

GenerateChangePhoneNumberTokenAsync获取用户和电话号码。您正在给它用户和用户名,因此当您尝试更改它(确认令牌)时,您正在尝试将电话号码与不匹配的用户名匹配,因此会出错。


推荐阅读