ASP.NET Identity 入门使用

C# 2018-03-21

Identity 是微软提供的身份验证和权限的框架 不知道的自行百度
直接开始操作:
1 nuget获取4个组件

● Microsoft.AspNet.Identity.Core:Identity的核心类库,实现了身份验证的核心功能,并提供了拓展接口。
● Microsoft.AspNet.Identity.EntityFramework:Identity数据持久化的EF实现。
● Microsoft.AspNet.Identity.OWIN:基于Identity的OWIN身份验证插件,它代替了原有的Form验证。
● Microsoft.Owin.Host.SystemWeb:Owin的IIS宿主,将IIS的接收到的请求转入Owin处理。

2 新建一个Startup类 右击添加->类->Owin Startup 创建 修改Configuration方法为如下

    public void Configuration(IAppBuilder app)
    {
        
        // 有关如何配置应用程序的详细信息,请访问 https://go.microsoft.com/fwlink/?LinkID=316888
        app.UseCookieAuthentication(new Microsoft.Owin.Security.Cookies.CookieAuthenticationOptions
        {
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            LoginPath = new PathString("/account/Login")//设置登录页面路径
        });

    }

3 修改配置文件

添加连接字符串

<connectionStrings>
<add name="IdentityDb" providerName="System.Data.SqlClient" connectionString="Data Source=xxx.xxx.xxx;Initial Catalog=DataManage;User ID=xxx;Password=xxxxxxx;" />
</connectionStrings>

AppSetting中配置启动文件路径 Identity下的App_Start下的Startup类

<add key="owin:AppStartup" value="Identity.App_Start.Startup" />

4 利用code frist 创建数据库
4.1 创建Configuration类

//IdentityDBContext还没有  在4.2的时候创建的
internal sealed class Configuration : DbMigrationsConfiguration<Models.IdentityDBContext>
{
    public Configuration()
    {
        //自动迁移数据库结构
        AutomaticMigrationsEnabled = true;
    }

    protected override void Seed(Identity.Models.IdentityDBContext context)
    {
        //  This method will be called after migrating to the latest version.

        //  You can use the DbSet<T>.AddOrUpdate() helper extension method 
        //  to avoid creating duplicate seed data. E.g.
        //
        //    context.People.AddOrUpdate(
        //      p => p.FullName,
        //      new Person { FullName = "Andrew Peters" },
        //      new Person { FullName = "Brice Lambson" },
        //      new Person { FullName = "Rowan Miller" }
        //    );
        //
    }
}

4.2 创建IdentityDBContext


public class IdentityDBContext : IdentityDbContext<IdentityUser>
{
    public IdentityDBContext() : base("IdentityDb", throwIfV1Schema: false)
    {

    }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        //Migrations.Configuration 是我刚刚创建的Configuration文件的目录
        Database.SetInitializer(new MigrateDatabaseToLatestVersion<IdentityDBContext,Migrations.Configuration>());
        modelBuilder.Entity<IdentityUserRole>().HasKey(r => r.RoleId).HasKey(r => r.UserId);
        modelBuilder.Entity<IdentityUserLogin>().HasKey(r => r.UserId);
    }
}

4.3 nuget程序包管理控制台输入update-database 更新数据库表结构

5 示例 对用户的增删改查
5.1 增

  IdentityUser identityUser = new IdentityUser { UserName = userLogin.username };
  var userManager = new UserManager<IdentityUser, string>(new UserStore<IdentityUser>(new IdentityDBContext()));
  IdentityResult result = userManager.Create(identityUser, userLogin.password);

5.2 删

IdentityUser identityUser = new IdentityUser();
var userManager = new UserManager<IdentityUser, string>(new UserStore<IdentityUser>(new IdentityDBContext()));
identityUser = userManager.Find(userLogin.username,userLogin.password);
var result = userManager.Delete(identityUser);

5.3 改

IdentityUser identityUser = new IdentityUser { UserName = userLogin.username };
var userManager = new UserManager<IdentityUser, string>(new UserStore<IdentityUser>(new IdentityDBContext()));
var result2 = await userManager.PasswordValidator.ValidateAsync(userLogin.password);
if (result2.Succeeded)
{
    identityUser = userManager.Find(userLogin.username,userLogin.password);
    identityUser.PasswordHash = userManager.PasswordHasher.HashPassword(userLogin.password);
    var result = userManager.Update(identityUser);
}

5.4 查

  var userManager = new UserManager<IdentityUser, string>(new UserStore<IdentityUser>(new IdentityDBContext()));
  userManager.Users;

每个结果都会有返回值 更深入的东西自行百度0.0 也可以添加C#技术交流QQ群:608188505


本文由 布墨 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。
阅读:1068

还不快抢沙发

添加新评论