當您創建安裝了標識位的網站,您的網站將有一個名爲 「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表的新列中。
然後,您需要通過重寫ApplicationSignInManager中的PasswordSignInAsync來處理檢查此值作爲登錄過程的一部分。
我做到了,如下所示:
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,但你的想法。
來源
2016-02-09 13:40:27
ozz
如何在Identity 3.0中使用沒有ApplicationSignInManager或PasswordSignInAsync(...)的ASP.NET Core 1.0實現相同功能? – nam
使用'.Result'是違反建議的,並且已知會在某些情況下導致死鎖,它也會阻止破壞整個異步點的線程。將'PasswordSignInAsync'方法標記爲'async'並等待'FindByEmailAsync'會更好。 – TKharaishvili
這最大的問題是,如果他們已經登錄,它不會影響他們。特別是如果他們選中記住我複選框。如果他們定期訪問該網站,他們將永遠不需要登錄。我試圖弄清楚現有的鎖定邏輯是否可以用於此目的,以及是否更好地處理已登錄的用戶。 –