asp.net core 登录身份认证(Cookie)
asp.net core 2最简单的登录功能
创建asp.net core Web Mvc项目

配置下选项

项目目录结构

在Models文件夹下新建两个实体类

public class Test
{
public int Id { get; set; }
[Required]
[Display(Name = "某人")]
public string Someone { get; set; }
[Required]
[Display(Name = "某事")]
public string Something { get; set; } }
public class User
{
public int Id { get; set; }
[Required]
[Display(Name = "用户名")]
public string UserName { get; set; }
[Display(Name = "密码")]
[Required]
public string UserPwd { get; set; }
public string Nothing { get; set; }
}
在项目文件夹下新建Data文件夹,新建DbContext类

public class MyDbContext:DbContext
{
public MyDbContext(DbContextOptions<MyDbContext> options) : base(options) { } public DbSet<User> Users { get; set; }
public DbSet<Test> Tests { get; set; }
}
在Startup.cs文件中的ConfigureServices下添加dbcontext服务

public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
}); //sqlserver
services.AddDbContext<MyDbContext>(x => x.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
在appsettings.json下配置数据库连接字符串

打开程序包管理器控制台,执行生成数据库上下文和创建更新数据库命令


去数据库查看下表是否生成,并直接添加一个种子数据。

添加控制器和视图



生成之后的项目结构目录如下

在homecontroller中编写一个Login方法

public class HomeController : Controller
{
private readonly MyDbContext _context; public HomeController(MyDbContext context)
{
_context = context;
}
public IActionResult Index()
{
return View();
} public IActionResult Privacy()
{
return View();
} [ResponseCache(Duration = , Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
} [HttpPost]
public async Task<IActionResult> Login(User user)
{
var loginuser = await _context.Users.FirstOrDefaultAsync(u => u.UserName == user.UserName);
if (loginuser == null)
return BadRequest("没有该用户");
if (loginuser.UserPwd != user.UserPwd)
return BadRequest("密码错误"); //声明对象创建
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, user.UserName)
};
ClaimsIdentity userIdentity = new ClaimsIdentity(claims, "login");
ClaimsPrincipal principal = new ClaimsPrincipal(userIdentity);
await HttpContext.SignInAsync(principal);
//写入HttpContext return RedirectToAction("Index", "Test");
}
}
在Startup中添加cookie认证服务并使用
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
//sqlserve
services.AddDbContext<MyDbContext>(x => x.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
//添加cookie认证服务
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.LoginPath = "/Home/Index/";
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
//使用认证服务
app.UseAuthentication();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
修改Views/Home/Index.cshtml为下面内容
@model CookieAuth.Models.User
@{
ViewData["Title"] = "Home Page";
}
<div class="row">
<div class="col-md-4">
<section>
<form method="post" asp-action="Login">
<h4>Login</h4>
<hr /> <div class="form-group">
<label asp-for="UserName"></label>
<input asp-for="UserName" class="form-control" />
</div> <div class="form-group">
<label asp-for="UserPwd"></label>
<input asp-for="UserPwd" type="password" class="form-control" />
</div> <div class="form-group">
<button type="submit" class="btn btn-default">登录</button>
</div> </form>
</section>
</div>
</div>
在_Layout中添加一个导航栏

然后在Test控制器中添加认证特性

就可以启动项目。
如果不没输入正确的地址是会被重定向到登录页面。


就这样先,如果是已有项目 只需要在startup中添加cookie认证服务以及在login和logout方法中创建和销毁声明。
在controller或者action中添加启动认证或者不启用认证随意配置
asp.net core 登录身份认证(Cookie)的更多相关文章
- ASP.NET Core的身份认证框架IdentityServer4--入门
ASP.NET Core的身份认证框架IdentityServer4--入门 2018年08月11日 10:09:00 qq_42606051 阅读数 4002 https://blog.csdn ...
- ASP.NET Core的身份认证框架IdentityServer4--(4)添加第三方快捷登录
添加对外部认证的支持 接下来我们将添加对外部认证的支持.这非常简单,因为你真正需要的是一个兼容ASP.NET Core的认证处理程序. ASP.NET Core本身也支持Google,Facebook ...
- ASP.NET Core的身份认证框架IdentityServer4(9)-使用OpenID Connect添加用户认证
OpenID Connect OpenID Connect 1.0是OAuth 2.0协议之上的一个简单的身份层. 它允许客户端基于授权服务器执行的身份验证来验证最终用户的身份,以及以可互操作和类似R ...
- ASP.NET Core的身份认证框架IdentityServer4--入门【转】
原文地址 Identity Server 4是IdentityServer的最新版本,它是流行的OpenID Connect和OAuth Framework for .NET,为ASP.NET Cor ...
- ASP.NET Core的身份认证框架IdentityServer4--(3)令牌服务配置访问控制跟UI添加
使用密码保护API OAuth 2.0 资源所有者密码授权允许一个客户端发送用户名和密码到IdentityServer并获得一个表示该用户的可以用于访问api的Token. 该规范建议仅对" ...
- ASP.NET Core的身份认证框架IdentityServer4(7)- 使用客户端证书控制API访问
前言 今天(2017-9-8,写于9.8,今天才发布)一口气连续把最后几篇IdentityServer4相关理论全部翻译完了,终于可以进入写代码的过程了,比较累.目前官方的文档和Demo以及一些相关组 ...
- ASP.NET Core的身份认证框架IdentityServer4(5)- 包和构建
包和构建 IdentityServer有许多nuget包 IdentityServer4 nuget | github 包含IdentityServer核心对象模型,服务和中间件. 仅支持内存配置和用 ...
- ASP.NET Core的身份认证框架IdentityServer4(1)-特性一览
IdentityServer4是ASP.NET Core的一个包含OpenID和OAuth 2.0协议的框架.OpenID和OAuth 的区别请看 https://www.zhihu.com/ques ...
- ASP.NET Core的身份认证框架IdentityServer4--(2)API跟WEB端配置
API配置 可以使用ASP.NET Core Web API模板.同样,我们建议您控制端口并使用与之前一样的方法来配置Kestrel和启动配置文件.端口配置为http://localhost:5001 ...
随机推荐
- Swift - 重写导航栏返回按钮
// 重写导航栏返回按钮方法 func configBackBtn() -> Void { // 返回按钮 let backButton = UIButton(type: .custom) // ...
- 【Loj10222】佳佳的Fibonacci
题面 题解 可以发现\(T(n)\)无法用递推式表示. 于是我们做如下变形: \[ T(n) = \sum _ {i = 1} ^ n i \times f_i \\ S(n) = \sum _ {i ...
- Yii 2.0 使用验证码
Yii2.0 提供了验证码组件.调用起来比较方便.以登录页面添加验证码为例. 1. 模型中添加字段和验证规则. common\models\LoginForm 添加如下代码 public $captc ...
- 面向忙碌开发者的 Android
面向忙碌开发者的 Android passiontim 关注 2016.11.19 21:41* 字数 4013 阅读 2967评论 2喜欢 92 面向忙碌开发者的 Android 视频教程(Tuts ...
- python的rtree包缺失libspatiaindex.so
1 准备autoconf工具 yum -y install autoconf automake libtool 2 准备g++编译器 yum -y install gcc gcc-c++ 3 下载并安 ...
- HttpClient使用详解 (一)
Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客户端发送Http请求变得容易,而且 ...
- JMeter:全面的乱码解决方案【转】
本文是转自https://www.cnblogs.com/mawenqiangios/p/7918583.html 感谢分享者 中文乱码一直都是比较让人棘手的问题,我们在使用Jmeter的过程中, ...
- ES6 之 解构赋值
本博文配合 阮一峰 <ES6 标准入门(第3版)>一书进行简要概述 ES6 中变量的解构赋值. 数组的解构赋值 基本用法 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这 ...
- spark总结——转载
转载自: spark总结 第一个Spark程序 /** * 功能:用spark实现的单词计数程序 * 环境:spark 1.6.1, scala 2.10.4 */ // 导入相关类库impor ...
- 王者荣耀交流协会--第3次Scrum会议
Scrum master:王玉玲 要求1:工作照片 要求2:时间跨度:2017年10月15号 6:00--6:24 共计24min要求3:地点:传媒西楼204,会议室要求4:立会内容:1.从昨日会 ...