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. Python网络02 Python服务器进化

    原文:Python网络02 Python服务器进化 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! **注意,在Python 3. ...

  2. 在CMD命令行和PowerShell中实现复制粘贴功能

    在CMD命令行和PowerShell中实现复制粘贴功能         常常使用命令行或者PowerShell的朋友肯定会遇到这样的情况:粘贴文本非常easy,右键--选择粘贴就可以,可是想要复制命令 ...

  3. 【LeetCode】Algorithms 题集(三)

    Search Insert Position 意: Given a sorted array and a target value, return the index if the target is ...

  4. Meteor全栈开发平台

    Meteor全栈开发平台 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博客地址为http://www.cnblogs.com/jasonno ...

  5. UVA 11174 Stand in a Line 树dp+算

    主题链接:点击打开链接 题意:白书的P103. 加个虚根就能够了...然后就是一个多重集排列. import java.io.PrintWriter; import java.util.ArrayLi ...

  6. 一个Bug的反思

    对输入数据判重,使用Map,将对象作为Key,使用map的containsKey方法来着重是否是重复记录.正常的处理流程:(1)将输入的数据封装成对象(2)判重,将没有重复的数据存储到map(3)对没 ...

  7. Matlab与.NET基于类型安全的接口混合编程入门

    原文:[原创]Matlab与.NET基于类型安全的接口混合编程入门 如果这些文章对你有用,有帮助,期待更多开源组件介绍,请不要吝啬手中的鼠标. [原创分享]Matlab.NET混编调用Figure窗体 ...

  8. hdu 3068 最长回文(manachar模板)

    Problem Description 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度.回文就是正反读都是一样的字符串,如aba, abba等   Input 输 ...

  9. c#中 ==与equals有什么区别

    对于值类型.引用类型来说比较过程怎样的? using System;using System.Collections.Generic;using System.Text; namespace Cons ...

  10. 刚刚回归的开始菜单 Windows 10全面体验

    北京时间2014年10月1日凌晨,微软就在旧金山召开新品公布会,对外展示了自己新一代操作系统Windows 10,覆盖了包含手机.平板.台式机以及Xbox One在内的全部平台.尽管微软此次公布的不过 ...