Изменение адреса электронной почты ASP .NET CORE Identity по умолчанию в столбце Имя пользователя

#.net #asp.net-mvc #asp.net-core #asp.net-identity

#.net #asp.net-mvc #asp.net-core #asp.net-identity

Вопрос:

ASP .NET CORE Identity хранит адрес электронной почты по умолчанию в столбце Имя пользователя. Как мне изменить его с сохранения адреса электронной почты в качестве имени пользователя на пользовательское имя в качестве имени пользователя?

Ответ №1:

Именно так пользовательский интерфейс по умолчанию обрабатывает его. Если вы хотите сделать это другим способом, вам нужно добавить страницу регистрации в свой проект и изменить ее. В частности, вы ищете эту строку в Register.cshtml.cs :

 await _userStore.SetUserNameAsync(user, Input.Email, CancellationToken.None);
 

Там вы просто измените Input.Email что-то вроде Input.UserName . Конечно, вам нужно будет добавить UserName свойство в модель страницы, чтобы вы могли собирать эту информацию в первую очередь и соответствующим образом добавлять входные данные в представление.

Ответ №2:

Вы всегда можете изменить страницу регистрации с использованием каркасов, чтобы на ней было как поле имени пользователя, так и поле электронной почты. В модели уже есть оба.

Что еще более важно, если вы хотите иметь отдельное поле имени пользователя, вы должны быть более осторожны в местах, где вы получаете пользователей по адресу электронной почты. Если адрес электронной почты не уникален, то у вас будут проблемы, если вы не обратите внимания на эти места. Особенно на таких страницах, как страница сброса пароля.

Я столкнулся с подобной ситуацией. Наше приложение изначально было создано для использования электронной почты в качестве имени пользователя. Поэтому в БД и имя пользователя, и адрес электронной почты были одинаковыми. Таким образом, во всем приложении было много страниц, на которых мы получали пользователя по электронной почте. Затем клиент захотел иметь имена пользователей, отличные от электронной почты. После его поддержки сброс пароля не работал, поскольку адрес электронной почты не был уникальным и имел несколько пользователей с одинаковым адресом электронной почты.

Чтобы устранить проблему, что я мог бы сделать, это изменить пользовательские интерфейсы сброса пароля или сделать адрес электронной почты уникальным полем.

Чтобы сделать электронную почту уникальной в asp. Идентификатор ядра сети вы можете использовать options.User.RequireUniqueEmail = true; в файле Startup.cs службы идентификации.

Хотя уже слишком поздно отвечать на этот вопрос, я подумал ответить на это сегодня, потому что это может быть кому-то полезно в 2021 году

Ответ №3:

Когда вы создаете идентификатор и регистрируете пользователя, OnPostAsync обработчик Register.cshtml.cs имеет следующий код для создания пользователя, который определяет значение UserName столбца.

 var user = new IdentityUser { UserName = Input.Email, Email = Input.Email };
var result = await _userManager.CreateAsync(user, Input.Password);
 

Вы можете изменить UseName = Input.Email свое пользовательское имя.