与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");
}
好了,说完了。。。
原文:http://www.cnblogs.com/abcde102978/p/7592708.html