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的更多相关文章

  1. 框架Asp.net Identity

    框架Asp.net Identity 在Asp.net上,微软的membershop框架经历了Asp.net membership到Asp.net simple membership,再到现在的Asp ...

  2. 全新的membership框架Asp.net Identity(1)——.Net membership的历史

    在Asp.net上,微软的membershop框架经历了Asp.net membership到Asp.net simple membership,再到现在的Asp.net Identity. 每一次改 ...

  3. 全新的membership框架Asp.net Identity

    在Asp.net上,微软的membershop框架经历了Asp.net membership到Asp.net simple membership,再到现在的Asp.net Identity. 每一次改 ...

  4. 全新的membership框架Asp.net Identity(2)——绕不过的Claims

    本来想直接就开始介绍Identity的部分,奈何自己挖坑太深,高举高打的方法不行.只能自己默默下载了Katana的源代码研究了好一段时间.发现要想能够理解好用好Identity, Claims是一个绕 ...

  5. 全新的membership框架Asp.net Identity——绕不过的Claims

    http://www.cnblogs.com/JustRun1983/p/4708176.html?utm_source=tuicool&utm_medium=referral

  6. Asp.Net Identity 深度解析 之 注册登录的扩展

    关于权限每个系统都有自己的解决方案,今天我们来讨论一下微软的权限框架Asp.Net Identity ,介绍如下  http://www.asp.net/identity 这里不在赘余. 很多人认为 ...

  7. ASP.NET Identity入门系列教程(一) 初识Identity

    摘要 通过本文你将了解ASP.NET身份验证机制,表单认证的基本流程,ASP.NET Membership的一些弊端以及ASP.NET Identity的主要优势. 目录 身份验证(Authentic ...

  8. 初识Asp.net Identity

    第一篇,多多指教啦! 之前做asp.net的网站只知道Asp.net的身份验证方式有:Windows验证和Forms验证.今天初步了解了下asp.net的Identity技术,顺带了解了它之前的Mem ...

  9. Owin+ASP.NET Identity浅析系列(三)框架结构分析

    在今天,读书有时是件“麻烦”事.它需要你付出时间,付出精力,还要付出一份心境.--仅以<Owin+ASP.NET Identity浅析系列>来祭奠那逝去的…… 前两篇博客仅仅说了下功能如何 ...

随机推荐

  1. Android 在非主线程无法操作UI意识

    Android在应用显示Dialog是一个非常easy事儿,但我从来没有尝试过Service里面展示Dialog. 经验UI操作要在主线程,本地的服务Service是主线程里没错,可是远程servic ...

  2. BZOJ 1823 JSOI 2010 盛宴 2-SAT

    标题效果:有着n材料的种类,m陪审团. 每种材料具有两种不同的方法.每个法官都有两个标准.做出来的每一个法官的菜必须至少满足一个需求. 问:是否有这样一个程序. 思考:2-SAT经典的内置图形问题.因 ...

  3. 【web开发学习笔记】Structs2 Action学习笔记(两)

    action学习笔记2-大约action method讨论 Action运行的时候并不一定要运行execute方法,能够在配置文件里配置Action的时候用method=来指定运行哪个方法 也能够在u ...

  4. React组件开发入门

    React 组件开发入门 Introduction 本文组成: Ryan Clark文章Getting started with React的翻译. 博主的实践心得. React由Facebook的程 ...

  5. 超可爱 纯CSS3实现的小猪、小老鼠、小牛

    原文:超可爱 纯CSS3实现的小猪.小老鼠.小牛 利用纯CSS3绘制一些人物.动物.风景已经不是一件新鲜的事情了,主要是利用CSS3可以让直线变成任意的曲线,于是简单的矢量图形绘制对CSS3来说就小菜 ...

  6. AsyncTask来源分析(一)

    于android开发过程AsyncTask我会经常处理它.在网上,也有很多的其描述,因此,这里是不是说的用法,直接写自己的学习经验,以及它的一些浅显的认识,忘记错批评. AsyncTask它是一个抽象 ...

  7. JS数据绑定模板artTemplate试用

    之前写JS绑定数据曾经用过tmpl库,虽然功能比较强大但是感觉不是很轻量,对于相对简单的数据需求显得有些臃肿.而Ajax返回数据自己拼接html的方式又显得不够高端,因此今天看了一篇介绍artTemp ...

  8. Mule ESB-Content-Based Routing Tutorial(2)

    承接 Mule ESB-Content-Based Routing Tutorial(1) 五.执行应用程序  完毕创建,配置.并保存你的新的应用程序,您就能够在嵌入Mule的server上执行(包含 ...

  9. C++在stack的deque实现

     本文实现STL在stack大部分功能,同时加入了许多功能. 请注意以下几点: 1.Stack它是一个适配器,在底部vector.list.deque等实现 2.Stack不含有迭代器 在本例中, ...

  10. C面试题

    1.sizeof()和strlen()使用? 答案: 1.从功能定义,strlen功能,要查找字符串的长度,sizeof功能是用来寻找指定的变量或变量类型的存储器占用 尺寸: 2.sizeof是运算符 ...