Net Core Identity 身份验证:注册、登录和注销 (简单示例)
一、前言
一般我们自己的系统都会用自己设置的一套身份验证授权的代码,这次用net core的identity来完成简单的注册、登录和注销。
二、数据库
首先就是创建上下文,我这里简单的建了Users和UserClaim表,要是没有UserClaim等下的登录操作是会报错的,应该是有身份认证方面的关系。
public class DataBaseContext : DbContext
{
public DataBaseContext(DbContextOptions<DataBaseContext> options)
: base(options)
{ }
public DbSet<User> Users { get; set; }
public DbSet<IdentityUserClaim<string>> UserClaim { get; set; }
}
public class User : IdentityUser
{
public string companyId { get; set; }
public string PassWord { get; set; }
}
这里User继承了IdentityUser,IdentityUser中就用很多的基础字段,像是UserName等所以我们可以再User类中扩展我们的字段。
add-migration Init和update-database Init再控制台执行,生成表。
三、Startup注册服务
在ConfigureServices中注册如下
1、数据库上下文连接
//添加数据库连接
services.AddDbContext<DataBaseContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
2、添加标识服务,包括默认的UI、令牌提供和身份验的cookie,并且添加identity信息存储的实体框架实现,用于关联数据库创建用户获取用户信息等。AddDefaultIdentity一个相当于AddIdentity、AddDefaultUI和AddDefaultTokenProviders三个。如果User不继承IdentityUser使用AddEntityFrameworkStores会报错。
services.AddDefaultIdentity<User>().AddEntityFrameworkStores<DataBaseContext>();
3、添加Identity的选项,可以设定密码的强度、长度、使用字符、密码输入错误次数等等。
services.Configure<IdentityOptions>(options =>
{
// 密码设置
options.Password.RequireDigit = false;
options.Password.RequireLowercase = false;
options.Password.RequireNonAlphanumeric = false;
options.Password.RequireUppercase = false;
options.Password.RequiredLength = ;
options.Password.RequiredUniqueChars = ; // 锁定设置
options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes();
options.Lockout.MaxFailedAccessAttempts = ;
options.Lockout.AllowedForNewUsers = true; // 用户设置
options.User.AllowedUserNameCharacters =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";
options.User.RequireUniqueEmail = false;
});
4、配置应用程序的cookie
services.ConfigureApplicationCookie(options =>
{
// Cookie设置
options.Cookie.HttpOnly = true;
options.ExpireTimeSpan = TimeSpan.FromMinutes(); options.LoginPath = "/Login/Index";
options.AccessDeniedPath = "/Home/Index";
options.SlidingExpiration = true;
});
在Config中注册身份认证
app.UseAuthentication();
四、简单的登录、注册和注销
既然是简单的例子,那我是真的怎么简单怎么来,代码也就没几条。
先创建一个Home控制器并加上[Authorize]特性,没得到验证的就统统无法访问。按照上面的Startup.cs已经将UserManager依赖注入了,它是用来管理用户的比如注册啥的。
[Authorize]
public class HomeController : Controller
{
private UserManager<User> userManager;public HomeController(UserManager<User> _userManager)
{
userManager = _userManager;
}
public async Task<IActionResult> Index()
{
var res = await userManager.GetUserAsync(HttpContext.User);
return View();
}
}
然后创建一个Login控制器,我们可以在里面写登录、注册和注销的方法。Login控制器除了UserManager外还要注入SignManager,它是用来用户登录、注销等操作的。
public class LoginController : Controller
{
//用于提供持久性存储的用户信息
private UserManager<User> userManager;
private SignInManager<User> signManager;
public LoginController(UserManager<User> _userManager,SignInManager<User> _signManager)
{
userManager = _userManager;
signManager = _signManager;
}
}
1、注册
注册直接用CreateAsync方法,会自动在数据库创建用户。SignInAsync方法用于刚注册的马上用户登录。
public async Task<IActionResult> Register()
{
var user = new User() { UserName = "xu2", PhoneNumber = "", companyId = "" };
var result = await userManager.CreateAsync(user, "");
await signManager.SignInAsync(user, true);
if (result.Succeeded)
return Redirect("/Home/Index");
return Redirect("/Login/Index");
}
2、登录
登录不能用SignInAsync了,要用PasswordSignInAsync密码登录
public async Task<IActionResult> Index()
{
var s = await signManager.PasswordSignInAsync("xu", "", true, false);
return View();
}
3、注销
这边直接return view()是无法注销的,因为cookie会被重新加载,需要return Redirect("/Home/Index")重定向
public async Task<IActionResult> LogOut()
{
await signManager.SignOutAsync();
return View();
}
4、获取当前登录用户
var res = await userManager.GetUserAsync(HttpContext.User);
Net Core Identity 身份验证:注册、登录和注销 (简单示例)的更多相关文章
- ASP.NET Core和ASP.NET Framework共享Identity身份验证
.NET Core 已经热了好一阵子,1.1版本发布后其可用性也越来越高,开源.组件化.跨平台.性能优秀.社区活跃等等标签再加上"微软爸爸"主推和大力支持,尽管现阶段对比.net ...
- ASP.NET Core 和 ASP.NET Framework 共享 Identity 身份验证
.NET Core 已经热了好一阵子,1.1版本发布后其可用性也越来越高,开源.组件化.跨平台.性能优秀.社区活跃等等标签再加上"微软爸爸"主推和大力支持,尽管现阶段对比.net ...
- 【asp.net core 系列】13 Identity 身份验证入门
0. 前言 通过前两篇我们实现了如何在Service层如何访问数据,以及如何运用简单的加密算法对数据加密.这一篇我们将探索如何实现asp.net core的身份验证. 1. 身份验证 asp.net ...
- 坎坷路:ASP.NET Core 1.0 Identity 身份验证(中集)
上一篇:<坎坷路:ASP.NET 5 Identity 身份验证(上集)> ASP.NET Core 1.0 什么鬼?它是 ASP.NET vNext,也是 ASP.NET 5,以后也可能 ...
- 使用JWT的ASP.NET CORE令牌身份验证和授权(无Cookie)——第1部分
原文:使用JWT的ASP.NET CORE令牌身份验证和授权(无Cookie)--第1部分 原文链接:https://www.codeproject.com/Articles/5160941/ASP- ...
- ASP.NET MVC 随想录——探索ASP.NET Identity 身份验证和基于角色的授权,中级篇
在前一篇文章中,我介绍了ASP.NET Identity 基本API的运用并创建了若干用户账号.那么在本篇文章中,我将继续ASP.NET Identity 之旅,向您展示如何运用ASP.NET Ide ...
- ASP.NET Identity 身份验证和基于角色的授权
ASP.NET Identity 身份验证和基于角色的授权 阅读目录 探索身份验证与授权 使用ASP.NET Identity 身份验证 使用角色进行授权 初始化数据,Seeding 数据库 小结 在 ...
- 坎坷路:ASP.NET 5 Identity 身份验证(上集)
之所以为上集,是因为我并没有解决这个问题,写这篇博文的目的是纪录一下我所遇到的问题,以免自己忘记,其实已经忘了差不多了,写的过程也是自己回顾的过程,并且之前收集有关 ASP.NET 5 身份验证的书签 ...
- SQLServer 中的身份验证及登录问题
SQLServer 中的身份验证及登录问题 by:授客 QQ:1033553122 身份验证 SQL Server 支持两种身份验证模式,即Windows 身份验证模式和混合模式. Windows 身 ...
随机推荐
- 阿里云服务器ecs + tomcat + 域名解析 部署web页面
1.购买ecs:https://www.aliyun.com/product/ecs?spm=5176.12825654.eofdhaal5.2.3bf92c4aYOB7gL&aly_as=A ...
- 【USACO 5.3.1】量取牛奶
农夫约翰要量取 Q(1 <= Q <= 20,000)夸脱(夸脱,quarts,容积单位——译者注) 他的最好的牛奶,并把它装入一个大瓶子中卖出.消费者要多少,他就给多少,从不有任何误差. ...
- 使用TryGetComponent取代GetComponent以避免Editor中的内存分配
作为Unity开发人员,可能或多或少都会遇到过一个常见的Unity的GC分配问题——在Editor中使用GetComponent方法来获取一个不存在的Component时会分配额外的内存.就像下图 需 ...
- Flask框架整个流程源码解读
Flask框架整个流程源码解读 一.总的流程 运行Flask其本质是运行Flask对象中的__call__,而__call__本质调用wsgi_app的方法 wsgi_app方法 def wsgi_a ...
- 那些你不知道的HTML知识,快来学习一下吧
前言 HTML作为前端三大基础知识点之一,是每一个前端开发人员都要掌握的部分.今天这篇文章我们来看看一些平时不太会注意,却在面试时可能会问到的题目,来看看你都会吗? 如何使用div模拟实现textar ...
- 爬虫4:pdf页面+pdfminer模块+demo
本文介绍下pdf页面的爬取,需要借助pdfminer模块 demo一般流程: 1)设置url url = 'http://www.------' + '.PDF' 2)requests模块获取url ...
- PHP7源码之array_unique函数分析
以下源码基于 PHP 7.3.8 array array_unique ( array $array [, int $sort_flags = SORT_STRING ] ) (PHP 4 >= ...
- [POJ3107] Godfather - 暴力枚举(树的重心)
Godfather Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8728 Accepted: 3064 Descrip ...
- 【OUC2019写作】学术论文写作第九小组第一次博客作业
个人简介 潘旻琦:我是潘旻琦:我的爱好是游泳:羊肉泡馍是海大食堂中我最喜欢的一道菜(清真食堂):一句想说的话是:“追随本心,坚持不懈”. 郭念帆:我是郭念帆:我的爱好是足球:海大食堂中最喜欢的一道菜偏 ...
- Python网络爬虫——Appuim+夜神模拟器爬取得到APP课程数据
一.背景介绍 随着生产力和经济社会的发展,温饱问题基本解决,人们开始追求更高层次的精神文明,开始愿意为知识和内容付费.从2016年开始,内容付费渐渐成为时尚. 罗辑思维创始人罗振宇全力打造" ...