尝试更新现有用户的设置时 ASP.NET 核心标识"User validation failed: InvalidUserName"



我的代码中有一个函数,它可以更改网站的视觉主题,以匹配他们选择的内容。这在我的开发设置中没有问题,但在生产(Azure Web App(中,它无法实际更新具有正确主题的数据库和用户对象。

我得到的唯一错误消息或任何东西都是控制台中的:

[40m[1m[33mwarn[39m[22m[49m: Microsoft.AspNetCore.Identity.UserManager[13]
User validation failed: InvalidUserName. 

考虑到代码:,我似乎无法理解

public async Task<IActionResult> ChangeThemeAsync(string theme)
{
bool res = Enum.TryParse(theme, out ColorTheme ct);
if (!res)
{
return BadRequest($"Unable to change theme.");
}
var user = await _userManager.GetUserAsync(User);
if (user == null)
{
return BadRequest($"Unable to load user with ID '{_userManager.GetUserId(User)}', so could not change theme.");
}
else
{
Console.WriteLine("NEW THEME: " + ct.ToString() + ", USER: " + user.UserName);
user.UserTheme = ct;
await _userManager.UpdateAsync(user);
return RedirectToPage();
}
}

我清楚地得到了User对象,然后在相同的函数中更新它,没有任何实际问题。有了Console.WriteLine,我可以验证函数中是否放入了正确的值。

这是WebsiteUser类,我还没有创建自己的UserManager或任何其他类(你可以看出我没有这个SO问题的问题(:

public class WebsiteUser : IdentityUser
{
// to comply with laws like COPPA and stuff like that
[PersonalData]
public DateTime DateOfBirth { get; set; }

[PersonalData]
public string RealName { get; set; }
[PersonalData]
public string AboutMe { get; set; }
[PersonalData]
public string Location { get; set; }
[PersonalData]
public Gender Gender { get; set; }
[PersonalData]
public ColorTheme UserTheme { get; set; } = ColorTheme.None;
}
public enum Gender : byte
{
[Display(Name = "Not set")]
Unset = 0,
Male = 1,
Female = 2,
[Display(Name = "Non-binary")]
NonBinary = 3
}
public enum ColorTheme : byte
{
None = 0,
Dark = 1,
Brown = 2,
Blue = 3,
}

是什么导致了User validation failed: InvalidUserName,和/或我的本地设置与Azure Web App的操作方式之间有什么区别?

所以,我解决了自己的问题。

在我的Startup.cs文件中,我列出了以下内容:

options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._+";

我测试的帐户的用户名中包含一个"@",因为我在加入允许的字符限制之前已经创建了该帐户。我没有注意到任何问题,因为我已经有很长一段时间没有测试更改此帐户的任何设置了。所以我想这是我的责任。

但至少现在这个问题已经解决了。我添加了"@"字符作为允许的字符之一,现在一切都按预期进行!

最新更新