Исключить электронную почту из IdentityUser в Asp Net MVC - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть asp. net MVC проект с аутентификацией. Реализация по умолчанию использует адрес электронной почты либо для регистрации пользователей, либо для входа в систему, но в моем проекте мне не нужен их адрес электронной почты, и я хочу использовать простое строковое имя пользователя, поэтому я включил следующий код в свой метод OnModelCreating, чтобы исключить электронную почту адреса и некоторые другие функции, которые мне не нужны:

modelBuilder.Entity<ApplicationUser>().Ignore(p => p.AccessFailedCount).
            Ignore(p => p.Email).Ignore(p => p.EmailConfirmed).Ignore(p => p.LockoutEnabled).
            Ignore(p => p.LockoutEndDateUtc).Ignore(p => p.PhoneNumber).
            Ignore(p => p.PhoneNumberConfirmed).Ignore(p => p.TwoFactorEnabled);

Я изменил LoginViewModel и Login.cs html и заменил поля адреса электронной почты именем пользователя, но когда я пытаюсь войти, возникает исключение повышается в действии входа в систему в следующей строке:

var result = await SignInManager.PasswordSignInAsync(model.Username, model.Password, 
            model.RememberMe, shouldLockout: false);

На странице ошибки указано:

Свойство 'Email' не является объявленным свойством для типа 'ApplicationUser' , Убедитесь, что свойство не было явно исключено из модели с помощью метода Ignore или аннотации данных NotMappedAttribute. Убедитесь, что это допустимое примитивное свойство.

Вопрос в том, как полностью исключить электронную почту?

1 Ответ

0 голосов
/ 11 февраля 2020

Вам не нужно вносить изменения в метод OnModelCreating . Все, что вам нужно сделать, это сделать несколько изменений в ViewModel и методе Login & Register.

  1. Замените имя свойства Email на Имя пользователя и закомментируйте аннотацию [EmailAddress] .
  2. Замените свойство Email на Имя пользователя в представлении Логин .
  3. В методе Login замените модель . Электронная почта на model.Username . Вы заметите, что Identity использует метод PasswordSignInAsyn c, который принимает имя пользователя в качестве параметра.

Аналогично, вы должны добавить поле Username для RegisterViewModel , Метод Register и представление, позволяющее пользователю вводить имя пользователя во время регистрации.

Вам не нужно явно игнорировать поле Email в Метод OnModelCreating.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...