与1.0版本相比微软做了一些调整。详细请参考官方文档,我这里就讲2.0的吧
1.首先要在 根目录下 Startup.cs 类中启用 cookie会话,有两处要配置
第一处在 public void Configure(IApplicationBuilder app, IHostingEnvironment env) 方法里
设置 app.UseAuthentication();
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); } //启用资源文件访问 app.UseStaticFiles(); //启用cookie会话 app.UseAuthentication(); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); }
第二处 在public void ConfigureServices(IServiceCollection services) 方法里
“你的cookie名称”--一定要一致。
public void ConfigureServices(IServiceCollection services) { services.AddMvc(); //services.Configure<IISOptions>(option=>{ // option.AuthenticationDisplayName=""; //}); services.AddCoreServices(); //设置cookie信息 services.AddAuthentication("你的cookie名称").AddCookie("你的cookie名称",Options=>{ Options.LoginPath="/WeChat/Login";//设置登录页,还有其他配置就不作介绍了 }); }
2.登录
2.0的登录作了调整 需要引用 using Microsoft.AspNetCore.Authentication; 此命名空间
public IActionResult Login(LoginViewModel model,string returnUrl = null) { //省略到数据库验证代码 ............ //设置声明,从数据库读取,设置角色之类,详情请科普 mvc的Identity声明认证 var claims = new List<Claim>() { new Claim("userModel",JsonConvert.SerializeObject(model)), //new Claim("Role",model.RoleName), }; var userPrincipal = new ClaimsPrincipal(new ClaimsIdentity(claims, "声明的名称")); //登陆 awiat HttpContext.SignInAsync("你的cookie名称", userPrincipal,new AuthenticationProperties { ExpiresUtc = DateTime.UtcNow.AddMinutes(900)//过期时间 }); if(returnUrl==null) { //重定向到首页 return RedirectToAction("Index", "Home"); } //重定向到初始请求页 return Redirect(returnUrl); }
3.退出
/// <summary> /// 退出 /// </summary> public IActionResult Logout() { await HttpContext.SignOutAsync("你的cookie名称"); //重定向到登录页 return RedirectToAction("Login", "Account"); }
好了,说完了。。。
时间: 2024-10-10 03:46:00