Я работаю над приложением ASP.NET Core 6 MVC, которое использует ASP.NET Core Identity. Когда я пытаюсь создать нового пользователя с помощью UserManager
, я получаю эту ошибку:
Имя пользователя ' ' недействительно, может содержать только буквы или цифры.
Имя пользователя не имеет пробелов.
Когда я пытаюсь создать нового пользователя, я получаю ошибку:
var user = new User
{
Name = "my name",
UserName = "GoodName",
Email = "[email protected]",
EmailConfirmed = true
};
var result = await _userManager.CreateAsync(user, "123723-Aa");
Код в файле программы:
builder.Services.AddIdentity<User, Role>(options =>
{
// User settings.
options.User.AllowedUserNameCharacters =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";
options.User.RequireUniqueEmail = false;
})
.AddEntityFrameworkStores<School.Database.SchoolContext>()
.AddUserManager<UserManager<User>>()
.AddClaimsPrincipalFactory<ApplicationUserClaimsPrincipalFactory>()
.AddDefaultTokenProviders();
Это ссылка на репо:
https://github.com/MrMustafa-2/TestProject.git
И когда вы запустите проект, перейдите по этому URL-адресу:
/Аккаунт/Регистрация
Затем вы увидите ошибку в точке останова. Я отмечаю ее.
Я жду ...
Спасибо
Да, только для тестового кода
Я использовал ваш код, но не смог воспроизвести проблему. Вы можете проверить, внедрена ли соответствующая сущность User в вашу зависимость userManager, и вы можете установить точку останова в методе CreateAsync, чтобы проверить, есть ли конкретное сообщение об ошибке, например Описание = «Имя пользователя 'GoodName1' недопустимо, может содержать только буквы или цифры». Если ваше поле «Имя пользователя» не содержит пробелов в начале и конце, а ошибку по-прежнему не удается устранить, можете ли вы поделиться своей моделью пользователя и контекстом базы данных?
@Юнинг Дуань, обновляю пост - загружаю проект, если можно, проверьте, пожалуйста
Согласно приведенной выше официальной документации Microsoft, Допустимые символы по умолчанию в поле «Имя пользователя» таблицы AspNet_Users:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+
Согласно вашему вопросу, вы используете пробел в поле имени пользователя, например «любое имя пользователя».
Вы должны использовать его как «любое_имя_пользователя» или «любое_имя_пользователя», или вы можете просто использовать символы из приведенных выше списков.
Тем не менее, вы хотите использовать пробел в поле имени пользователя, вы можете настроить его с помощью свойства AllowedUserNameCharacters для изменения символов по умолчанию, например:
services.AddIdentity<IdentityUser<string>, IdentityRole>(options =>{
options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+/ ";
});
да 👍 более подробную информацию о том, как это работает, вы можете проверить github.com/aspnet/Identity/blob/…
Нет, в имени пользователя нет пробелов, я обновил свое сообщение и добавил свой код в класс программы, но получаю ту же ошибку: Неверное имя пользователя.
@MrMustafa022, В приведенном выше коде я добавил пробел в конце. Пожалуйста, проверьте это. ИЛИ добавьте имя пользователя, которое вы используете во время выполнения, для получения дополнительных разъяснений.
Да, я тестирую код с пробелом, но получаю ту же ошибку: InvalidUserName.
@MrMustafa022 MrMustafa022, попробуйте без пробела. Пожалуйста, внимательно проверьте приведенный выше код ответа.
Поверьте мне, я пробовал с пробелом и без пробела.
Поскольку в APPUser есть настраиваемое поле UserName, это приводит к дублированию имени пользователя с именемidentUser, поэтому возникает ошибка invalid
.
Чтобы избежать этой ошибки, вы можете добавить атрибут override
к Appuser, например:
public class AppUser : IdentityUser<string>
{
public override string UserName { get; set; } = null!;
}
Когда я повторно вставляю данные:
public async Task<IActionResult> Register()
{
var user = new AppUser
{
Id = "1",
UserName = "johndoekk",
Email = "[email protected]",
FirstName = "Jonhn",
LastName = "Dnoe",
Name = "John Dnoe"
};
var result = await _userManager.CreateAsync(user, "123123-Aa");
int sfd = 4;
if (result.Succeeded)
{
//await SignInManager.SignInAsync(user, isPersistent: false);
return RedirectToAction("Index", "Home");
}
return Ok();
}
@marc_s 123723-Aa — пароль