Podczas tworzenia strony z bitami tożsamości zainstalowanych, witryna będzie mieć plik o nazwie "IdentityModels.cs". W tym pliku znajduje się klasa o nazwie ApplicationUser, która dziedziczy z 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
Jest ładny ogniwo w tamtejszych komentarzach, dla ułatwienia kliknij here
Ten poradnik powie Ci dokładnie to, co trzeba zrobić, aby dodać właściwości niestandardowe dla użytkownika.
I rzeczywiście, nawet nie patrząc na kursie.
1) dodać obiekt do klasy ApplicationUser, np:
public bool? IsEnabled { get; set; }
2) dodać kolumny o tej samej nazwie na stole AspNetUsers w swojej DB.
3) boom, to wszystko!
Teraz w AccountController masz działanie rejestru następująco:
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)
Dodałem IsEnabled = true na utworzenie obiektu ApplicationUser. Wartość będzie teraz zachowana w nowej kolumnie w tabeli AspNetUsers.
Będziesz wtedy musiał zająć się sprawdzenie tej wartości jako część procesu logowania, nadrzędnymi PasswordSignInAsync w ApplicationSignInManager.
zrobiłem to w następujący sposób:
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);
}
Twój przebieg mogą się różnić, a może nie chcieć, aby powrócić że SignInStatus, ale masz pomysł.
Jak osiągnąć to samo w ASP.NET Core 1.0 z Identity 3.0, który nie ma ApplicationSignInManager lub PasswordSignInAsync (...)? – nam
Używanie '.Result' jest niezgodne z zaleceniami i wiadomo, że powoduje zakleszczenia w niektórych scenariuszach, blokuje również wątek pokonujący cały punkt asynchroniczny. Lepiej byłoby oznaczyć metodę 'PasswordSignInAsync' jako' async' i zamiast tego oczekiwać 'FindByEmailAsync'. – TKharaishvili
Największym problemem jest to, że jeśli są już zalogowani, nie wpłynie to na nich. Zwłaszcza jeśli zaznaczyli pole wyboru Zapamiętaj mnie. Jeśli regularnie odwiedzają witrynę, nigdy nie będą musieli się logować. Staram się dowiedzieć, czy można do tego wykorzystać istniejącą logikę blokowania i czy jest ona lepsza w obsłudze użytkowników, którzy są już zalogowani. . –