При создании сайта с идентичностью битами, установленными, ваш сайт будет иметь файл с именем "IdentityModels.cs". В этом файле находится класс ApplicationUser, который наследуется от IdentityUser.
// You can add profile data for the user by adding more properties to your ApplicationUser class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more.
public class ApplicationUser : IdentityUser
Существует хорошая ссылка в комментариях там, для удобства нажмите here
Этот учебник говорит вам именно то, что вам нужно сделать, чтобы добавить пользовательские свойства для пользователя.
На самом деле, даже не смотрите на учебник.
1) добавить свойство к классу ApplicationUser, например:
public bool? IsEnabled { get; set; }
2) добавить столбец с тем же именем на столе AspNetUsers в вашей БД.
3) стрела, вот и все!
Теперь в вашем AccountController, у вас есть действие Регистрация следующим образом:
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser { UserName = model.Email, Email = model.Email, IsEnabled = true };
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
Я добавил IsEnabled = истинна на создание объекта ApplicationUser. Теперь значение будет сохранено в вашем новом столбце таблицы AspNetUsers.
Вам необходимо будет обработать это значение как часть процесса входа, переопределив PasswordSignInAsync в ApplicationSignInManager.
Я сделал это следующим образом:
public override Task<SignInStatus> PasswordSignInAsync(string userName, string password, bool rememberMe, bool shouldLockout)
{
var user = UserManager.FindByEmailAsync(userName).Result;
if ((user.IsEnabled.HasValue && !user.IsEnabled.Value) || !user.IsEnabled.HasValue)
{
return Task.FromResult<SignInStatus>(SignInStatus.LockedOut);
}
return base.PasswordSignInAsync(userName, password, rememberMe, shouldLockout);
}
Ваш пробег может варьироваться, и вы не можете вернуть, что SignInStatus, но вы получите идею.
Как вы достигаете того же в ASP.NET Core 1.0 с Identity 3.0, который не имеет ApplicationSignInManager или PasswordSignInAsync (...)? – nam
Использование '.Result' противоречит рекомендациям и, как известно, вызывает блокировки в определенных сценариях, оно также блокирует поток, поражающий всю точку асинхронизации. Лучше пометить метод '' PasswordSignInAsync'' как 'async' и вместо' FindByEmailAsync' ждать. – TKharaishvili
Самая большая проблема с этим - если они уже вошли в систему, это не повлияет на них. В частности, если они проверили флажок «Запомни меня». Если они получают доступ к сайту на регулярной основе, им не нужно будет входить в систему. Я пытаюсь выяснить, можно ли использовать эту логику блокировки для этого, и если она лучше подходит для обработки пользователей, которые уже вошли в систему , –