• 6.如何使用官方提供的nuget包实现cookie登陆


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

  • 相关阅读:
    委托和事件
    解决kalilinux:“下列签名无效: KEYEXPIRED 1425567400"
    【c# 学习笔记】委托的使用
    【c# 学习笔记】c#委托是什么
    【c# 学习笔记】面向对象编程的应用
    【c# 学习笔记】接口与抽象类
    【C# 开发技巧】番外篇故事-我是一个线程
    【物联网硬件安全】二、固件分析-固件逆向
    【物联网硬件安全】二、固件分析-固件提取
    【物联网硬件安全】一、硬件分析-电路分析
  • 原文地址:https://www.cnblogs.com/quan01994/p/6003072.html
Copyright © 2020-2023  润新知