我有一个函数在我的代码,改变我的网站的视觉主题,以匹配他们选择的选择。这在我的开发设置中没有问题,但在生产(Azure )中,它实际上无法用正确的主题更新数据库和用户对象。
我得到的唯一错误消息是控制台中的以下内容:
[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();
}
}
我清楚地获得了用户对象,然后在相同的函数中更新它,没有任何实际问题。使用Console.WriteLine,我可以验证是否将正确的值放入函数中。
这是WebsiteUser类,我还没有创建自己的UserManager或任何其他类(您可以告诉我,this SO question没有这样的问题):
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是如何做到这一点有什么区别的?
发布于 2022-07-27 02:11:47
所以我解决了我自己的问题。
在我的Startup.cs文件中,我列出了以下内容:
options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._+";
我测试的帐户的用户名中包含了一个'@
‘,因为我在输入允许的字符限制之前已经创建了这个帐户。我没有注意到与此有关的任何问题,因为我没有测试更改任何这个帐户的设置在很长一段时间。所以我想这是我的责任。
但至少现在这个问题已经解决了。我添加了“@
”字符作为允许的字符之一,现在一切都按预期进行了!
https://stackoverflow.com/questions/73128447
复制相似问题