程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 6.如何使用官方提供的nuget包實現cookie登陸,nugetcookie

6.如何使用官方提供的nuget包實現cookie登陸,nugetcookie

編輯:關於.NET

6.如何使用官方提供的nuget包實現cookie登陸,nugetcookie


 "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");

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved