Недопустимое имя пользователя ASP.NET Core Identity

Я работаю над приложением 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-адресу:

/Аккаунт/Регистрация

Затем вы увидите ошибку в точке останова. Я отмечаю ее.

Я жду ...

Спасибо

@marc_s 123723-Aa — пароль

Ramshankar TV 21.07.2024 08:57

Да, только для тестового кода

MrMustafa022 21.07.2024 11:01

Я использовал ваш код, но не смог воспроизвести проблему. Вы можете проверить, внедрена ли соответствующая сущность User в вашу зависимость userManager, и вы можете установить точку останова в методе CreateAsync, чтобы проверить, есть ли конкретное сообщение об ошибке, например Описание = «Имя пользователя 'GoodName1' недопустимо, может содержать только буквы или цифры». Если ваше поле «Имя пользователя» не содержит пробелов в начале и конце, а ошибку по-прежнему не удается устранить, можете ли вы поделиться своей моделью пользователя и контекстом базы данных?

Yuning Duan 22.07.2024 11:59

@Юнинг Дуань, обновляю пост - загружаю проект, если можно, проверьте, пожалуйста

MrMustafa022 22.07.2024 12:15
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
4
119
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ссылки: https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.identity.useroptions.allowedusernamecharacters?view=aspnetcore-6.0

Согласно приведенной выше официальной документации Microsoft, Допустимые символы по умолчанию в поле «Имя пользователя» таблицы AspNet_Users:

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+

Согласно вашему вопросу, вы используете пробел в поле имени пользователя, например «любое имя пользователя».

Вы должны использовать его как «любое_имя_пользователя» или «любое_имя_пользователя», или вы можете просто использовать символы из приведенных выше списков.

Тем не менее, вы хотите использовать пробел в поле имени пользователя, вы можете настроить его с помощью свойства AllowedUserNameCharacters для изменения символов по умолчанию, например:

services.AddIdentity<IdentityUser<string>, IdentityRole>(options =>{
    options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+/ ";
});

да 👍 более подробную информацию о том, как это работает, вы можете проверить github.com/aspnet/Identity/blob/…

Ramshankar TV 21.07.2024 09:28

Нет, в имени пользователя нет пробелов, я обновил свое сообщение и добавил свой код в класс программы, но получаю ту же ошибку: Неверное имя пользователя.

MrMustafa022 21.07.2024 10:34

@MrMustafa022, В приведенном выше коде я добавил пробел в конце. Пожалуйста, проверьте это. ИЛИ добавьте имя пользователя, которое вы используете во время выполнения, для получения дополнительных разъяснений.

Abhay Dedkawala 21.07.2024 10:38

Да, я тестирую код с пробелом, но получаю ту же ошибку: InvalidUserName.

MrMustafa022 21.07.2024 10:40

@MrMustafa022 MrMustafa022, попробуйте без пробела. Пожалуйста, внимательно проверьте приведенный выше код ответа.

Abhay Dedkawala 21.07.2024 10:46

Поверьте мне, я пробовал с пробелом и без пробела.

MrMustafa022 21.07.2024 11:00
Ответ принят как подходящий

Поскольку в 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();
}

Другие вопросы по теме