细细拆解 ASP.NET MVC5 身份系统Identity------(1)
有关MVC框架基础知识请移步=>传智播客,下载相关入门视频耐心看完:
有关微软ASP.NET MVC框架上一版本身份系统知识,请移步=>Jesse Liu的博客参考相关文章:
网上已经有一篇写了一章就太监的教程:
http://www.cnblogs.com/liuhaorain/p/3776467.html
准备工作:
一、先是基本建立工程,三个图完事。
二、请大家下载.NET Reflector反编译工具,这是每个.NET开发人员必备的工具:(这个蛮重要的,很多底层代码一看,上层为什么那么写就完全明白了)
具体破解方法不再赘述,非本文重点,请自行解决。
现在,让我们开始解刨这个看起来很大的框架吧!
一、我列出了在项目自动生成的文件中,需要我们重点关注的类文件(.cs):
1.App_Start文件夹中的:
Startup.Auth.cs
//这个文件里,只有一个ConfigureAuth方法,此方法在根目录的Startup.cs中被调用。
//在此方法里,你可以调用(app.Use/或其他方法名,貌似是用了Node的命名法)来加载有关身份验证所需要的某些“中间件(middleware)”
//微软给了很多例子,比如:
//1.配置数据库上下文app.CreatePerOwinContext(ApplicationDbContext.Create);
//使用EntityFrameWork Code First 封装数据库的信息,集成很多巨方便的数据操作类库
//2.初始化用户管理器和登录管理器
//app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
//app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);
//两个createxxx里面封装好的很多方法可直接用来登录,注销,注册,验证邮箱等,很方便
//你去控制器里看其实注册登录只需要一句 await LoginAsync(...)/CreateAsync(...)就行了
//3.还有什么Cookie登录,记住我功能,外站账号登陆等,都是封装好的逻辑方法
//每一个app.Use(...)其实背后都有超多的逻辑代码,每个Use又只做了一件事,充分体现了强大的高内聚松耦合的框架特性!
IdentityConfig.cs
//这里面有四个类:
//前两个是SMS短信和Email服务,非本章重点,略
//后面两个分别是:
ApplicationUserManager : UserManager<ApplicationUser>
ApplicationSignInManager : SignInManager<ApplicationUser, string>
//从名字上可以看出是“用户管理器”和“登录管理器”,其实说白了就是封装了操作Identity数据库的方法+登录用到的方法
//比如异步登录/注册的 LoginAsync(/*paras*/),createAsync(/*paras*/)
//比如异步插入+保存数据的InsertAsync(/*paras*/) SaveChanges(); 有的是些EF框架的东西
//后面的文章会反编译这两个类,看看具体的逻辑是什么大家就懂了。
2.Controllers文件夹中的:
AccountController.cs
//控制器,具体的后文详述
3.Models文件夹中的:
IdentityModels.cs
//这里面有两个类:
ApplicationUser : IdentityUser
ApplicationDbContext : IdentityDbContext<ApplicationUser>
//前者代表了用户表,后者代表了Identity数据库。
*4.根目录最底下的那个
Startup.cs
//这个里面只有一个Configuration(IAppBuilder app)方法
//用自己的app参数调用上面那个Startup.Auth.cs文件里的那个ConfigureAuth(app);
//关于Configuration这个方法,简单理解是 “类似C语言中main函数”
//网站运行后,框架底层帮助我们封装了程序的信息到app这个对象里,然后传递app到这个Configuration里,开始整个网站的运行。
//我们可以查看一下这个东西里面到底有什么:
//它是实现IAppBuilder接口的一个AppBuilder类的实例对象,里面主要是有个字典类的字段,运行后它是这个样子的:
//可以看到是一些host信息及“其他”不明信息,不是本系列的重点,就点到这里。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。