網上關於.netcore驗證登錄代碼經常會看到兩個方法:HttpContext.SignInAsync 和 SigninManger.SignInAsync。新手往往搞不明白這兩者的區別(我也是新手)。
后來查了不少英文資料才大體搞明白。
SigninManger.SignInAsync是來自微軟.netcore已實現的含后台數據庫實體的完整認證系統(ASP.NET Core Identity)。SigninManger只是其中一個登錄管理類,還有角色管理類(RoleManager)和用戶管理類(UserManager)。
生成的實體數據庫表有(.netcore3.1):AspNetRoleClaims,AspNetUserClaims,AspNetUserLogins,AspNetUserRoles,AspNetUserTokens,AspNetRoles,AspNetUsers
數據庫實體類有:IdentityRole,IdentityRoleClaim<string>,IdentityUser,IdentityUserClaim<string>,IdentityUserLogin<string>,IdentityUserRole<string>,IdentityUserToken<string>,IdentityRoleClaim<string>,IdentityUserClaim<string>,IdentityUserLogin<string>,
IdentityUserRole<string>,IdentityUserToken<string>
所以說這是個完整的登錄認證系統,從后台數據庫表到登錄、注銷,角色創建、刪除,用戶創建、刪除,微軟全幫你實現了,你只需在創建項目時勾選上認證就可以了。什么也不做就搭建了一個登錄認證系統,而且功能完善。
但項目的需求是千差萬別的,微軟這個通用的認證登錄系統並不能滿足所有的需求,有時需要建立自己的登錄認證系統,后台ORM不想用微軟件EF,也不想用哪些內置的表。這時就可以用HttpContext.SignInAsync來實現登錄。
其實SigninManger.SignInAsync最終也是調用HttpContext.SignInAsync來實現的。
注銷也類似:HttpContext.SignOutAsync SignInManager.SignOutAsync
