"Microsoft.AspNetCore.Authentication.Cookies": "1.0.0",
這裡需要用到的是這個nuget包
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseCookieAuthentication(new CookieAuthenticationOptions()
{
AuthenticationScheme = "MyCookieMiddlewareInstance",
LoginPath = new PathString("/Admin/Account/Login/"),
AccessDeniedPath = new PathString("/Admin/Home/Index/"),
AutomaticAuthenticate = true,
AutomaticChallenge = true,
CookiePath = "/"
});
}
在startup.cs中加入
這裡解釋一下 AuthenticationScheme 對應cookie的名字
LoginPath 如果沒有登陸,登陸頁面的路徑
AccessDeniedPath 如果權限不夠返回的頁面
CookiePath cookie可用的范圍,這個功能我還沒用過,應該可以實現前台和後台登陸的區分。
另外幾個我也不是很清楚
如何寫登陸方法呢
var identity = new ClaimsIdentity("AccountLogin");
identity.AddClaim(new Claim(ClaimTypes.Name, "Test"));
identity.AddClaim(new Claim("AccountID", "1"));
identity.AddClaim(new Claim("Modules", "1,2,3"));
identity.AddClaim(new Claim(ClaimTypes.Role,"Admin"));
ClaimsPrincipal principal = new ClaimsPrincipal(identity);
await HttpContext.Authentication.SignInAsync("MyCookieMiddlewareInstance", principal, new AuthenticationProperties
{
IsPersistent = true,
ExpiresUtc = DateTime.UtcNow.AddMinutes(20),
});
以上就是寫的 可以自定義存入cookie的信息
那麼如何在程序中取出數據呢,我推薦使用擴展方法
public static class UserExtension
{/// <summary>
/// 獲取用戶ID
/// </summary>
/// <param name="User"></param>
/// <returns></returns>
public static int GetAccountID(this ClaimsPrincipal User)
{
var accountID = User.FindFirst("AccountID").Value;
return Convert.ToInt32(accountID);
}
}
將該類引入controller,還有視圖
視圖引用的話可以直接添加在_ViewImports.cshtml
@using MySqlDemo @using MySqlDemo.Extend //這裡就是引用到了UserExtension
@using MySqlDemo.ViewModels @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers @inject Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration TelemetryConfiguration
這樣的話就可以直接使用 User.GetAccountID(),來獲取用戶的ID
判斷登陸可以用 也可以用Roles來判斷角色 ,但是字符串必須一模一樣 這裡是不支持用戶具有多個角色的判斷。如果需要自己去寫擴展方法
[Authorize(Roles = "SuperAdmin")]
退出登陸的話
await HttpContext.Authentication.SignOutAsync("MyCookieMiddlewareInstance");