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

版权声明:此文章转载自_infocool

原文链接:http://www.infocool.net/kb/DotNet/201610/205602.html

如需转载请联系听云College团队成员小尹 邮箱:yinhy#tingyun.com

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


想阅读更多技术文章,请访问听云技术博客,访问听云官方网站感受更多应用性能优化魔力。

关于作者

coco秋洁

我爱学习,学习使我快乐

我要评论

评论请先登录,或注册