6.如何使用官方提供的nuget包实现cookie登陆
2016-10-27 10:46
337 查看
"Microsoft.AspNetCore.Authentication.Cookies": "1.0.0",
这里需要用到的是这个nuget包
在startup.cs中加入
这里解释一下 AuthenticationScheme 对应cookie的名字
LoginPath 如果没有登陆,登陆页面的路径
AccessDeniedPath 如果权限不够返回的页面
CookiePath cookie可用的范围,这个功能我还没用过,应该可以实现前台和后台登陆的区分。
另外几个我也不是很清楚
如何写登陆方法呢
以上就是写的 可以自定义存入cookie的信息
那么如何在程序中取出数据呢,我推荐使用扩展方法
将该类引入controller,还有视图
视图引用的话可以直接添加在_ViewImports.cshtml
这样的话就可以直接使用 User.GetAccountID(),来获取用户的ID
判断登陆可以用 也可以用Roles来判断角色 ,但是字符串必须一模一样 这里是不支持用户具有多个角色的判断。如果需要自己去写扩展方法
[Authorize(Roles = "SuperAdmin")]
退出登陆的话
await HttpContext.Authentication.SignOutAsync("MyCookieMiddlewareInstance");
这里需要用到的是这个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");
相关文章推荐
- 使用cookie实现统计访问者登陆次数
- httpclient模拟登陆具体实现(使用js设置cookie)
- 基于cookie使用过滤器实现客户每次访问自登陆一次
- 如何使用iframe实现跨域写入cookie 并且兼容大部分浏览器
- 在php中如何实现cookie即时生效,不用刷新就可以使用
- 使用cookie实现统计访问者登陆次数
- iOS 百度地图如何自定义弹出汽泡 使用百度官方提供的方法
- 在php中如何实现cookie即时生效,不用刷新就可以使用
- 使用session和cookie实现免登陆
- java web-如何实现IE禁用cookie后继续使用session
- php如何设置cookie实现自动登陆?
- 如何移植使用W5500官方提供的最新Socket库_编译不过解决方法
- cookie禁用,如何使用session实现文件共享
- 备忘录《一》基于cookie使用过滤器实现客户每次访问自登陆一次
- ASP.NET使用Cookie简单实现记住登陆状态功能
- httpclient模拟登陆具体实现(使用js设置cookie)
- 如何移植使用W5500官方提供的最新Socket库
- ASP.NET使用Cookie简单实现记住登陆状态功能
- 基于cookie使用过滤器实现客户每次访问自登陆一次
- 在php中如何实现cookie即时生效,不用刷新就可以使用