微软的权限框架Asp.Net Identity
Asp.Net Identity 深度解析 之 注册登录的扩展
关于权限每个系统都有自己的解决方案,今天我们来讨论一下微软的权限框架Asp.Net Identity ,介绍如下 http://www.asp.net/identity 这里不在赘余。
很多人认为 Asp.Net Identity 不好用,很难控制,其实不然,如果去认真研究会发现很好用,现在我们一起来学习这套权限框架。
我这里的环境是VS2013 Update 3, 所以新建一个MVC5项目的时候 Asp.Net Identity 是2.0版本。
项目新建完成后我们运行一下 先看一下注册:
这里是使用电子邮件作为登录名使用,和前一版本有所区别,如果你认为还可以使用111111作为密码那就错大了。
密码难度明显提升,你也许或想,我不需要真么高强度的密码,我就想要111111作为密码,别着急,后面博客会有介绍.
输入邮箱和密码就可以注册成功 。
关键代码入下:
增加了很多异步操作。
现在我们来扩展这个注册功能,加入更加真实的数据
找到RegisterViewModel.cs 添加入下代码:
#region 扩展 [Display(Name = "用户名")]
public string UserName { get; set; } [Display(Name = "电话(手机/固话)")]
[Phone]
public string PhoneNumber { get; set; }
#endregion
然后我们修改Register.cshtml 添加如下代码:
1 <div class="form-group">
2 @Html.LabelFor(m => m.UserName, new { @class = "col-md-2 control-label" })
3 <div class="col-md-10">
4 @Html.TextBoxFor(m => m.UserName, new { @class = "form-control" })
5 </div>
6 </div>
7 <div class="form-group">
8 @Html.LabelFor(m => m.PhoneNumber, new { @class = "col-md-2 control-label" })
9 <div class="col-md-10">
10 @Html.TextBoxFor(m => m.PhoneNumber, new { @class = "form-control" })
11 </div>
12 </div>
下面我们来看一下效果
到这里我们的扩展基本结束,我们来修改扩展后的Register Action
新建一个 RegisterExtension Action
1 [HttpPost]
2 [AllowAnonymous]
3 [ValidateAntiForgeryToken]
4 public async Task<ActionResult> RegisterExtension(RegisterViewModel model)
5 {
6 if (ModelState.IsValid)
7 {
//这里是扩展的代码
8 var user = new ApplicationUser { UserName = model.UserName, Email = model.Email, PhoneNumber = model.PhoneNumber };
9 var result = await UserManager.CreateAsync(user, model.Password);
10 if (result.Succeeded)
11 {
12 await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
13 // 有关如何启用帐户确认和密码重置的详细信息,请访问 http://go.microsoft.com/fwlink/?LinkID=320771
14 // 发送包含此链接的电子邮件
15 // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
16 // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
17 // await UserManager.SendEmailAsync(user.Id, "确认你的帐户", "请通过单击 <a href=\"" + callbackUrl + "\">這裏</a>来确认你的帐户");
18 return RedirectToAction("Index", "Home");
19 }
20 AddErrors(result);
21 }
22 // 如果我们进行到这一步时某个地方出错,则重新显示表单
23 return View(model);
24 }
细心的朋友可能已经注意到 ,数据库字段并没有做修改,是因为 数据库中有UserName,和PhoneNumber 这两个字段
运行项目查看效果 :
点击注册后 效果如下
注册成功,登陆成功,现在我们的一个注册扩展已经完成了。
如果你想要在登陆页面将邮箱改为用户名,我们可以这样做:
修改Login.cshtml 和 Login Action 将 Email ==> UserName 即可。
下一篇,我们将会讨论 如何添加角色,以及如何为用户添加角色,敬请期待,文章中如有问题欢迎指出。
微软的权限框架Asp.Net Identity的更多相关文章
- 框架Asp.net Identity
框架Asp.net Identity 在Asp.net上,微软的membershop框架经历了Asp.net membership到Asp.net simple membership,再到现在的Asp ...
- 全新的membership框架Asp.net Identity(1)——.Net membership的历史
在Asp.net上,微软的membershop框架经历了Asp.net membership到Asp.net simple membership,再到现在的Asp.net Identity. 每一次改 ...
- 全新的membership框架Asp.net Identity
在Asp.net上,微软的membershop框架经历了Asp.net membership到Asp.net simple membership,再到现在的Asp.net Identity. 每一次改 ...
- 全新的membership框架Asp.net Identity(2)——绕不过的Claims
本来想直接就开始介绍Identity的部分,奈何自己挖坑太深,高举高打的方法不行.只能自己默默下载了Katana的源代码研究了好一段时间.发现要想能够理解好用好Identity, Claims是一个绕 ...
- 全新的membership框架Asp.net Identity——绕不过的Claims
http://www.cnblogs.com/JustRun1983/p/4708176.html?utm_source=tuicool&utm_medium=referral
- Asp.Net Identity 深度解析 之 注册登录的扩展
关于权限每个系统都有自己的解决方案,今天我们来讨论一下微软的权限框架Asp.Net Identity ,介绍如下 http://www.asp.net/identity 这里不在赘余. 很多人认为 ...
- ASP.NET Identity入门系列教程(一) 初识Identity
摘要 通过本文你将了解ASP.NET身份验证机制,表单认证的基本流程,ASP.NET Membership的一些弊端以及ASP.NET Identity的主要优势. 目录 身份验证(Authentic ...
- 初识Asp.net Identity
第一篇,多多指教啦! 之前做asp.net的网站只知道Asp.net的身份验证方式有:Windows验证和Forms验证.今天初步了解了下asp.net的Identity技术,顺带了解了它之前的Mem ...
- Owin+ASP.NET Identity浅析系列(三)框架结构分析
在今天,读书有时是件“麻烦”事.它需要你付出时间,付出精力,还要付出一份心境.--仅以<Owin+ASP.NET Identity浅析系列>来祭奠那逝去的…… 前两篇博客仅仅说了下功能如何 ...
随机推荐
- Azure File Service in IIS
微软Azure的Storage套件中提供了新的服务File Service,让我们运行在Azure中的程序都能共享存储,一个存储账号共享的没有上线,但每个共享的上限是5G.由于File Service ...
- Oracle to_char,to_date
一.在oracle中,当想把字符串为‘2011-09-20 08:30:45’的格式转化为日期格式,我们可以使用oracle提供的to_date函数. sql语句为: SELECT to_date(' ...
- unity3d 依据指定的Assets下的目录路径 返回这个路径下的全部文件名称
using UnityEngine; using System.Collections; using System.Collections.Generic; using System.IO; < ...
- 关于Java和.NET之间的通信问题(JSON)
前言: 最近项目在某XX领导的所谓指引下,非要转型Java,转就转吧,在转的过程前期是个痛苦期,特别.NET旧有项目和Java新项目需要通信时. 进入主题,Java和.NET之间需要通信,这时媒介很多 ...
- 集成 Entity Framework
ABP 基础设施层——集成 Entity Framework 本文翻译自ABP的官方教程<EntityFramework Integration>,地址为:http://aspnetboi ...
- 第10章 外观模式(Façade Pattern)
原文 第10章 外观模式(Façade Pattern) 概述: 在软件开发系统中,客户程序经常会与复杂系统的内部子系统之间产生耦合,而导致客户程序随着子系统的变化而变化.那么如何简化客户程序 ...
- AJAX 怎样在一个UpDatePanel中刷新另一个updatePanel
原文:AJAX 怎样在一个UpDatePanel中刷新另一个updatePanel 在页面上(.aspx)<asp:UpdatePanel ID="MyID1" runat= ...
- JS编程
JS编程常识 一.UI层的松耦合 松耦合就是要求各层遵循“最少知识原则”,或者说是各层各司其职,不要越权: HTML:结构层 CSS:表现层 JS:行为层 对于各层的职能,有一句比较贴切的解释:H ...
- 【地图API】为何您的坐标不准?如何纠偏?
原文:[地图API]为何您的坐标不准?如何纠偏? 摘要:各种坐标体系之间如何转换?到底有哪些坐标体系?什么是火星坐标?为什么我的坐标,在地图上显示会有偏移?本文详细解答以上问题.最后给出坐标拾取工具. ...
- 《java系统性能调优》--1.发现瓶颈
性能啊!性能! 之所以想写写性能调优,也是有感于我们的项目,我们採用一些手段使得系统性能上升了一个台阶,总是须要把这点经验沉淀一下.随着工作的深入,关于系统性能的事肯定还有非常多,也算是通过这个系列文 ...