asp.net identity(微软首推的身份验证)2.0分析-基于vs2015默认程序

原创 2017年02月05日 17:50:30

因为总是感觉,asp.net identity用起来不太舒服,比如代码的扩展性,以及维护以后的版本,所以对其进行分析

下面进入正文:

在vs2015自带的默认程序中,App_Start/IdentityConfig.cs,通过ApplicationUserManager Create函数开始分析,函数主要内容如下

  public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context) 
        {
            var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>()));
..........

可以得出,该函数初始化,新建ApplicationUserManager类(该类自身),传入一个新建UserStore泛型类,并给该UserStore泛型类通过查看该类定义得出,传入的为DbContext context参数

而在Microsoft.AspNet.Identity.EntityFramework二进制dll中,UserStore新建用户的函数为

public async virtual Task CreateAsync(TUser user)
        {
            ((UserStore<TUser, TRole, TKey, TUserLogin, TUserRole, TUserClaim>) this).ThrowIfDisposed();
            if (user == null)
            {
                throw new ArgumentNullException("user");
            }
            ((UserStore<TUser, TRole, TKey, TUserLogin, TUserRole, TUserClaim>) this)._userStore.Create(user);
            await ((UserStore<TUser, TRole, TKey, TUserLogin, TUserRole, TUserClaim>) this).SaveChanges().WithCurrentCulture();
        }

可以看到对数据库的操作关键在于_userStore.Create,而_userStore字段的初始化为,

this._userStore = new EntityStore<TUser>(context);
另外关于角色的管理,_roleStore字段为
this._roleStore = new EntityStore<TRole>(context);

EntityStore泛型中,通过内部调用EntityFramework对数据库进行操作

        public void Create(TEntity entity)
        {
            this.DbEntitySet.Add(entity);
        }
        

由此可知道,自己构建对数据库的操作,并和asp.net identity集成的方法




附上EntityStore的代码

namespace Microsoft.AspNet.Identity.EntityFramework
{
    using System;
    using System.Data.Entity;
    using System.Linq;
    using System.Runtime.CompilerServices;
    using System.Threading.Tasks;
    
    internal class EntityStore<TEntity> where TEntity: class
    {
        public EntityStore(DbContext context)
        {
            this.Context = context;
            this.DbEntitySet = context.Set<TEntity>();
        }
        
        public void Create(TEntity entity)
        {
            this.DbEntitySet.Add(entity);
        }
        
        public void Delete(TEntity entity)
        {
            this.DbEntitySet.Remove(entity);
        }
        
        public virtual Task<TEntity> GetByIdAsync(object id)
        {
            return this.DbEntitySet.FindAsync(new object[] { id });
        }
        
        public virtual void Update(TEntity entity)
        {
            if (entity != null)
            {
                this.Context.Entry<TEntity>(entity).State = EntityState.Modified;
            }
        }
        
        public DbContext Context { get; private set; }
        
        public DbSet<TEntity> DbEntitySet { get; private set; }
        
        public IQueryable<TEntity> EntitySet
        {
            get
            {
                return this.DbEntitySet;
            }
        }
    }





版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Identity2.0

一直觉得最近热门的Identity2.0离我很遥远,但从Random Stuff 看来的identity2.0演示还是让我彻底崩溃。 ...

路径名过长无法删除的解决办法

自己做得资源管理器,父目录复制到子目录的时候,没加判断,于是就一直递归的创建了几百个文件夹,路径过长,利用windows的资源管理器无法删除,只能剪出来一部分,分割他的路径长度。所以就做了下面一个简单...

c# 微信生成带参数的二维码

using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net...

自定义ASP.NET MVC身份验证(Identity)信息

ASP.NET Identity的一个主要特点就是能够很方便地增加用户身份信息(profile information)。在已有的ASP.NET Membership系统中,用户和身份信息(profi...

C#、ASP.NET 环境下如何在 form 身份验证User.Identity中携带像 UserID 这样的信息

ASP.NET 自己带了一个可以自动存储 form 身份验证信息的类 FormsAuthentication ,但这个 FormsAuthentication 自动的 Cookie 除了包含用户名和认...

ASP.Net 2.0窗体身份验证机制详解(FormsAuthentication) (转载)

ASP.Net 2.0窗体身份验证机制详解(FormsAuthentication) (转载) ASP.Net 2.0窗体身份验证机制详解(FormsAuthentication) ...

解释:ASP.NET 2.0 中的窗体身份验证

适用于: ASP.NET 2.0 版 摘要 :本教程阐释 ASP.NET 2.0 版中窗体身份验证的工作机制;阐释 IIS 和 ASP.NET 身份验证如何协作,以及 FormsAuthent...

asp.net中的窗体身份验证

  • 2012年01月12日 10:31
  • 528KB
  • 下载

Asp.net基于Form身份验证知识汇总

  • 2009年07月14日 09:05
  • 1.18MB
  • 下载

ASP.net的身份验证方式有哪些?分别是什么原理?

Asp.net的身份验证有有三种,分别是"Windows | Forms | Passport",其中又以Forms验证用的最多,也最灵活。 Forms 验证方式对基于用户的验证授权提供了很好的支持...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:asp.net identity(微软首推的身份验证)2.0分析-基于vs2015默认程序
举报原因:
原因补充:

(最多只允许输入30个字)