asp.net core 的用户注册功能——Identity上手
首先请using这个类库。
using Microsoft.AspNetCore.Identity;
这个类库老牛逼了,首先是包含了一个IdentityUser类。我们可以自己写一个User类继承IdentityUser,这样一来,很多属性我就不用手动建了。如你所见,我的User没有Emai这个字段,但是IdentityUser有这个字段。
public class User:IdentityUser
{
public string Pass { get; set; }
public string DisplayName { get; set; }
public DateTime RegisteredTime { get; set; }
}
如何把用户发来的数据变成一个User并且存入数据库?
显然,我他妈得先创建并且连接一个数据库。
创建数据库如果使用VSStudio是贼容易的一件事,只需要打开'视图菜单',然后点开'SQL Server对象资源管理器'。然后你就看到下面这个图。在上面点右键然后添加一个SQL服务器,然后在服务器上点右键查看属性,可以得到链接字符串。

这种简单的操作显然难不住你。下一步把连接字符串放到appsetting.json里面,下面这是一种推荐做法。你当然可以直接粘贴到你的startUp.cs文件中。不过谁会这么做呢?
"ConnectionStrings": {
"DefaultConnection": "这里就是你的连接字符串"
}
下一步要用这个连接字符串连上你的数据库。注意带颜色的字。很JB重要。
// 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;
});
// 看到了么,下面这行代码用来连接数据库。这是EF提供的方法。
services.AddDbContext<AppContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
// 在这里指定你的User类,然后再指定你的数据库。这是Identity类库提供的方法。
services.AddDefaultIdentity<User>().AddEntityFrameworkStores<AppContext>(); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
} app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
// 这里必须用上。
app.UseAuthentication();
app.UseMvc();
}
经过上面的配置,controller里面就可以注入很多方法。这下你看起来牛逼多了。
数据库连上了,接下来是真枪实弹的创建一个用户,是时候写controller了。
建一个随便什么controller吧。我建的是UserController,你可以随你的便。关我屌事呢?
在controller的构造函数里面注入一个UserManager的类,这个类也是Identity提供的。
public class UserController : ControllerBase
{
private readonly UserManager<User> _userManager; public UserController(UserManager<User> userManager)
{
_userManager = userManager;
}
......
这个UserManager有贼多的方法,这里我只用一个,createAsync方法。
// POST: api/User
[HttpPost]
public async Task PostAsync([FromBody]User _user)
{
//先创建一个user,不包括密码
var user = new User { Email = _user.Email , UserName = _user.UserName};
//将user和密码绑定入库
var result = await _userManager.CreateAsync(user, _user.Pass);
if (result.Succeeded)
{
Console.Write("注册成功!");
}
}
用Postman模拟一个请求。你注意到那个FromBody了吗?这个标记可以把发过来的json请求解析成User格式。

这里有一个新手大坑。如果你的 [FromBody] User _user这里写的是[FromBody] string _user, 你就不能用json格式发。会报什么json解析错误。
发送请求以后去看看你的数据库吧。已经创建好了一个User对象并且存到了你的数据库里。

这么多字段都是来自IdentityUser类,其中只有那个pass字段是我自己UserClass里面的。
最后补充【关于Migration】:
如果你报500错误,说什么表名无效的话。你需要做一下Migration。说白了就是:让数据库的表结构和你代码的Model结构相同。比如你现在有了一个UserModel,可是数据库没有User这个表。那么你能创建成功才他妈有鬼了。
怎么Migration?
简单。
这是创建一个名为“InitialCreate”的Migration
如果你用的是powershell
Add-Migration InitialCreate 如果你用的是console
dotnet ef migrations add InitialCreate 然后更新数据库
>powershell
Update-Database >console
dotnet ef database update
asp.net core 的用户注册功能——Identity上手的更多相关文章
- ASP.NET Core - ASP.NET Core MVC 的功能划分
概述 大型 Web 应用比小型 Web 应用需要更好的组织.在大型应用中,ASP.NET MVC(和 Core MVC)所用的默认组织结构开始成为你的负累.你可以使用两种简单的技术来更新组织方法并及时 ...
- ASP.NET Core Web 支付功能接入 支付宝-电脑网页支付篇
这篇文章将介绍ASP.NET Core中使用 开源项目 Payment,实现接入支付宝-电脑网页支付接口及同步跳转及异步通知功能. 开发环境:Win 10 x64.VS2017 15.6.4..NET ...
- ASP.NET Core Web 支付功能接入 微信-扫码支付篇
这篇文章将介绍ASP.NET Core中使用 开源项目 Payment,实现接入微信-扫码支付及异步通知功能. 开发环境:Win 10 x64.VS2017 15.6.4..NET Core SDK ...
- 【转载】ASP.NET Core Web 支付功能接入 微信-扫码支付篇
转自:http://www.cnblogs.com/essenroc/p/8630730.html 这篇文章将介绍ASP.NET Core中使用 开源项目 Payment,实现接入微信-扫码支付及异步 ...
- 【转载】ASP.NET Core Web 支付功能接入 支付宝-电脑网页支付篇
转自:http://www.cnblogs.com/essenroc/p/8627775.html 这篇文章将介绍ASP.NET Core中使用 开源项目 Payment,实现接入支付宝-电脑网页支付 ...
- 麻雀虽小,五脏俱全。基于Asp.net core + Sqlite 5分钟快速上手一个小项目
虽然该方法不会用在实际开发中,但该过程对于初学者还是非常友好的,真应了麻雀虽小,五脏俱全这句话了.好了不多废话了,直接开始!! 1.建立一个名为test的Asp.net core web应用程序 这一 ...
- 【asp.net core 系列】13 Identity 身份验证入门
0. 前言 通过前两篇我们实现了如何在Service层如何访问数据,以及如何运用简单的加密算法对数据加密.这一篇我们将探索如何实现asp.net core的身份验证. 1. 身份验证 asp.net ...
- ASP.NET Core Web 支付功能接入 微信-扫码支付篇(转)
原文 https://www.cnblogs.com/essenroc/p/8630730.html // 随着版本更迭,新版本可能无法完全适用,请参考仓库内的示例. 这篇文章将介绍ASP.NET C ...
- 【分分钟内搭建一个带用户系统的博客程序(一)用户系统】asp.net core的Identity真香,EF真香!
不用不知道,一用香到爆. 老哥是个屌丝前端,但也想写点web应用耍一耍.之前弄过了NodeJs,也弄过JAVA,最近由于写游戏的原因用C#,索性上手一波asp.net core. 这篇博客记录的是,如 ...
随机推荐
- 用HttpClient发送HTTPS请求报SSLException: Certificate for <域名> doesn't match any of the subject alternative names问题的解决
最近用server酱-PushBear做消息自动推送,用apache HttpClient做https的get请求,但是代码上到服务器端就报javax.net.ssl.SSLException: Ce ...
- Mac 终端便利工具: 管理工具-Homebrew 和提示工具oh my zsh
命令行提示工具 第一步: Homebrew - 安装与使用 https://blog.csdn.net/sir_coding/article/details/77509602 Homebrew安装问题 ...
- session总结
1.session是服务器端内存中的一块存储空间. 2.不同的浏览器窗口对应着不同的Session对象,两者的关系由Session ID来进行维护. 3.session的生命周期是以最后一次请求到达服 ...
- Spring框架的IOC之注解方式的快速入门
1. 步骤一:导入注解开发所有需要的jar包 * 引入IOC容器必须的6个jar包 * 多引入一个:Spring框架的AOP的jar包,spring-aop的jar包 2. 步骤二:创建对应的包结构, ...
- Thread(线程)和ThreadPool(线程池) Thread回调与返回值
Thread(线程) Thread开启线程:接收一个参数 TestClass tc = new TestClass(); //没有返回值,有一个object类型的参数的委托:两种写法. Paramet ...
- LayDate 时间选择插件的使用介绍 (低版本1.0好像是)
<span style="font-size:18px;"><!doctype html> <html> <head> <me ...
- 768A Oath of the Night's Watch
A. Oath of the Night's Watch time limit per test 2 seconds memory limit per test 256 megabytes input ...
- svn.SvnX
1. 使用SvnX的入门 http://www.divvun.no/doc/tools/docu-svn-user-svnx.html 2. SvnX的代码 https://code.google.c ...
- SNP/单核苷酸多态性分析
SNP/单核苷酸多态性分析 SNP(Single Nucleotide Polymorphism),即单核苷酸多态性,是由于单个核苷酸改变而导致的核酸序列多态.一般来说,一个SNP位点只有两种等位基因 ...
- 2018年这些UI设计趋势正在流行,跟上必拿高薪!
数字设计领域和时尚圈是一样的,总会有各种各样的趋势让人眼花缭乱.无论是用户界面的视觉元素,还是用户体验的细节,总有许多值得说道的新玩法和新方向.就目前来看,UI设计的大趋势是更加大胆新颖的视觉设计,通 ...