使用VSCode开发 Razer的智能感知不好。所以这里切换为VS2017进行开发:

新建一个Data的文件夹来存放我们的DBContext。在Data文件夹下新建:

ApplicationDbContext.cs

继承:IdentityDbContext在using Microsoft.AspNetCore.Identity.EntityFrameworkCore;的命名空间下面

然后在Models里面创建两个实体类:

ApplicaationUser和ApplicationUserRole

ApplicaationUser.cs内继承IdentityUser在命名空间using Microsoft.AspNetCore.Identity;下

如果我们想改主键的类型为guid的话,就需要给他一个泛型的参数

这里我们设置主键的类型为int类型的

ApplicationUserRole继承:IdentityRole<int>

修改ApplicationDbContext

同时我们还需要一个构造函数来接收我们的DbContextOptions

这里加上ApplicationDbContext

StartUp.cs

注册Identity

先引入命名空间:

using MvcCookieAuthSample.Data;

再引入命名空间:

using Microsoft.EntityFrameworkCore;

Configuration.GetConnectionString()是来获取配置文件内配置的数据库链接字符串

在appsettings.json中自己加上链接字符串:

  1. "ConnectionStrings": {
  2. "DefaultConnection": "server=.;databse=wjw_core1;uid=sa;pwd=sa;"
  3. }

然后把我们配置的链接字符串拷贝过来。

把Identity加进来

再引入命名空间

using Microsoft.AspNetCore.Identity;

密码限制

在identity下有一些默认的密码的限制,会很严格,这里我们改一下:

这样最终的代码

  1.     public void ConfigureServices(IServiceCollection services)
  2. {
  3. // services.Configure<CookiePolicyOptions>(options =>
  4. // {
  5. // // This lambda determines whether user consent for non-essential cookies is needed for a given request.
  6. // options.CheckConsentNeeded = context => true;
  7. // options.MinimumSameSitePolicy = SameSiteMode.None;
  8. // });
  9.  
  10. services.AddDbContext<ApplicationDbContext>(options =>
  11. {
  12. options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"));
  13. });
  14. services.AddIdentity<ApplicaationUser, ApplicationUserRole>()
  15. .AddEntityFrameworkStores<ApplicationDbContext>()
  16. .AddDefaultTokenProviders();
  17. services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
  18. .AddCookie(options=>{
  19. options.LoginPath="/Account/Login";
  20. });
  21.  
  22. services.Configure<IdentityOptions>(options =>
  23. {
  24. options.Password.RequireLowercase = false;
  25. options.Password.RequireNonAlphanumeric = false;
  26. options.Password.RequireUppercase = false;
  27. });
  28.  
  29. services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
  30. }

修改这里默认的登陆页面

AccountAcontroller中

UserManager是用来创建用户的

之前我们的ApplicationUser的单词进错了 这里我们统一的修改一下

SignInManager主要是用来登陆的

然后这个Action也必须是async的 同时返回的类型用Task去接收

加上判断,如果注册成功就跳转到首页上去

9分58秒

这行我们注册的代码就完成了。下面可以进行代码的测试

密码暴露了。修改密码框的类型为password 。同时确认密码的字段我们修改了为 ConfirmedPassword

重新创建数据库

通过nuget引入包:Microsoft.EntityFrameworkCore.Tools

没有这个包的话 EF的命令是没法用的

11分42秒

执行Migrations

执行EF的migrations命令报了个错误

上面写着让我用dotnet ef migrations remove方法。然后我就用了一下,然后就报了一个错误。发现应该是链接字符串的单词拼写错了

之前这的单词拼写错了。将链接字符串拼成正确的

打开sql server 局看到创建好的数据库了。

运行注册

运行页面执行注册。在AccountController里面加断点测试程序是否执行成功了。

这是注册成功的效果:

正常跳转是跳转到首页。这里跳转的地方,应该前面是是Action  后面是Home的控制器。上面代码我写反了 进行修正。

  1. public async Task<IActionResult> Register(RegisterViewModel registerViewModel)
  2. {
  3. var identityUser = new ApplicationUser() {
  4. Email=registerViewModel.Email,
  5. UserName=registerViewModel.Email,
  6. NormalizedEmail=registerViewModel.Email
  7. };
  8. var identityResult = await _userManager.CreateAsync(identityUser, registerViewModel.Password);
  9. if (identityResult.Succeeded)
  10. {
  11. return RedirectToAction("Index", "Home");
  12. }
  13. return View();
  14. }

看一下数据库内的表 就有了我们创建的数据了。

完成

任务44:Identity MVC: EF + Identity实现的更多相关文章

  1. 【ASP.NET Core快速入门】(十四)MVC开发:UI、 EF + Identity实现、注册实现、登陆实现

    前言 之前我们进行了MVC的web页面的Cookie-based认证实现,接下来的开发我们要基于之前的MvcCookieAuthSample项目做修改. MvcCookieAuthSample项目地址 ...

  2. 菜鸟入门【ASP.NET Core】14:MVC开发:UI、 EF + Identity实现、注册实现、登陆实现

    前言 之前我们进行了MVC的web页面的Cookie-based认证实现,接下来的开发我们要基于之前的MvcCookieAuthSample项目做修改. MvcCookieAuthSample项目地址 ...

  3. 任务45:Identity MVC:注册逻辑实现

    任务45:Identity MVC:注册逻辑实现 做登陆 在注册成功直接进行登陆,使用SignIn 这里的signIn实际上是HttpContext.Signin的封装 await _signMana ...

  4. 任务46:Identity MVC:登录逻辑实现

    任务46:Identity MVC:登录逻辑实现 实现登陆的方法 退出方法 _layout里面增加如下的代码: Login.cshtml 运行代码测试: 这个地方的单词之前拼错了.这里进行修正 输入账 ...

  5. 任务47:Identity MVC:ReturnUrl实现

    任务47:Identity MVC:ReturnUrl实现 在最上面加一个私有的方法 登陆也加上returnUrl Login的post方法.加入returnUrl的参数 登陆界面也需要加上 asp- ...

  6. 任务48:Identity MVC:Model后端验证

    任务48:Identity MVC:Model后端验证 RegisterViewModel using System; using System.Collections.Generic; using ...

  7. 任务49:Identity MVC:Model前端验证

    任务49:Identity MVC:Model前端验证 前端验证使用的是jquery的validate的组件 _ValidationScriptsPartial.cshtml 在我们的layout里面 ...

  8. 任务50:Identity MVC:DbContextSeed初始化

    任务50:Identity MVC:DbContextSeed初始化 首先添加seed 每次应用程序启动,监测一下,是否是第一次启动.如果是第一次执行,我们需要在数据库内添加一个记录 比如说我们的用户 ...

  9. C# MVC+EF—结构搭建

    近期做了MVC+EF的项目,现在项目完结了,抽个时间写个小DOM总结一下,顺便加深理解. 一.新建MVC项目,结构是这样的

  10. easyui datagrid 禁止选中行 EF的增删改查(转载) C# 获取用户IP地址(转载) MVC EF 执行SQL语句(转载) 在EF中执行SQL语句(转载) EF中使用SQL语句或存储过程 .net MVC使用Session验证用户登录 PowerDesigner 参照完整性约束(转载)

    easyui datagrid 禁止选中行   没有找到可以直接禁止的属性,但是找到两个间接禁止的方式. 方式一: //onClickRow: function (rowIndex, rowData) ...

随机推荐

  1. IOS开发 二维码功能的实现

    原帖地址:http://yul100887.blog.163.com/blog/static/20033613520121020611299/ 如今二维码随处可见,无论是实物商品还是各种礼券都少不了二 ...

  2. Solidedge如何修改特征的参数

    我已经长出了60MM,现在发现不对,要改成50MM.右击这个特征,点击编辑定义   直接左键单击尺寸,修改数据,按回车,鼠标右键,即可.    

  3. HDU2897( 巴什博奕变形)

    邂逅明下 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...

  4. C++中的数组array和vector,lambda表达式,C字符串加操作,C++中新类型数组(数组缓存),多元数组,new缓冲

     使用C++风格的数组.不须要管理内存. array要注意不要溢出,由于它是栈上开辟内存. array适用于不论什么类型 #include<iostream> #include< ...

  5. 我的javascript

    JavaScript的简介: 1.定义:javascript是一门动态弱类型的解释型编程语言,增强页面动态效果,实现页面与用户之间的实时动态的交互. javascript是由三部分组成:ECMAScr ...

  6. javascript参数arguments对象

    ECMAScript函数的参数与大多树其他语言中函数的参数有所不同.ECMAScript函数不介意传递进来多少个参数,也不在乎传进来参数是什么类型.函数体是通过arguments对象来访问参数数组.a ...

  7. 多线程-----Thread类与Runnable接口的区别

    第一个继承Thread类来实现多线程,其实是相当于拿出三件事即三个卖早餐10份的任务分别分给三个窗口,他们各做各的事各卖各的早餐各完成各的任务,因为MyThread继承Thread类,所以在newMy ...

  8. Chrome浏览器V43版本号不支持silverlight 5.0的解决的方法

    场景: 浏览器:chrome V43 插件:silverlight 5.0 操作系统:xp 问题: 自己开发silverlight站点在IE7和firefox中能正常打开,但在chrome中打开失败. ...

  9. BZOJ 2244: [SDOI2011]拦截导弹 DP+CDQ分治

    2244: [SDOI2011]拦截导弹 Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度.并且能够拦截 ...

  10. hadoop rsync

    1 rsync用来同步配置文件 rsync用来同步两个文件夹,它拷贝的是二者的差异,因此速度很快.在hadoop脚本中,rsync用来同步配置文件. 2 HADOOP_SLAVE_SLEEP的用途 大 ...