.Net Core过滤器:1.权限认证过滤器

  • Post author:
  • Post category:其他


在.Ner core中,如果有需要身份才能访问的地方,加上特性Authorize即可。

接下来,开始开发使用.Net core过滤器:

一、在Startup类中:

1.配置身份认证的key和身份认证不通过时要跳转的页面(一般是登录页):

2.在系统配置中,开启身份认证

此时再访问需要权限的页面,就会自动跳转到配置的登录页去

模拟登录操作,创建身份信息,存储起来

public IActionResult DoLogin()
        {
            //要在startup中开启身份认证

            //模拟登录操作,登录成功后将用户信息存储在cookie中,下次可以直接使用

            var user = new UserInfo()
            {
                UserId = 1000,
                UserName = "Ling、bug",
                Age = 23,
                Sex = "男",
                Birthday = DateTime.Now.AddYears(-24),
                LoginDate = DateTime.Now
            };

            //1.初始化身份并指定身份认证的类型
            string type = "Forms";
            var identity = new ClaimsIdentity(type);
            //2.添加身份信息
            foreach (var proc in user.GetType().GetProperties())
            {
                var key = proc.Name;
                var value = proc.GetValue(user);
                identity.AddClaim(new Claim(key, value.ToString()));
            }
            //3.生成身份票据
            var ticket = new ClaimsPrincipal(identity);
            //4.将身份票据保存在请求上下文

            //注意:这里保存时会指定一个key去保存(后期也是通过这个key来取身份和验证身份),
            //这个身份要与startup文件中配置的key相同:services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
            HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, ticket);

            return Content("登录操作");
        }

此时做了登录之后再去访问需要身份的页面,就可以访问了

但是,如果在需要用到当前身份信息的时候(比如获取当前登录用户的姓名等等),该如何获取当前用户的身份信息呢?

[Authorize]
        public IActionResult Index()
        {
            //有了身份认证,在需要当前用户信息时,读取当前用户信息
            var currentUserDataList = new List<string>();
            foreach (var proc in typeof(UserInfo).GetProperties())
            {
                var key = proc.Name;
                var value = HttpContext.User.FindFirstValue(key);
                currentUserDataList.Add(string.Format(@"{0} = {1}", key, value));
            }
            return Content(string.Join(",", currentUserDataList));
        }

退出登录操作:

/// <summary>
        /// 退出登录
        /// </summary>
        /// <returns></returns>
        public IActionResult DoLoginOut()
        {
            string key = CookieAuthenticationDefaults.AuthenticationScheme;
            HttpContext.SignOutAsync(key);
            return Content("退出成功,cookie key = " + key);
        }



版权声明:本文为m0_37886901原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。