Asp.net mvc 5 了解Asp.Net身份关键点
我是一名Asp.net开发人员,但对Asp.net身份框架非常陌生。我一直在研究这个示例应用程序,也学习了一些关于身份的教程,但我仍然不能完全掌握这个概念。我对Asp.net成员身份有着非常坚定的控制,但身份似乎与成员身份完全不同。我将解释我迄今为止所做的工作 我正在创建一个简单的应用程序,其中我遵循代码优先的方法。我已经为用户创建了实体模型,该模型继承自IdentityUser,并有一些额外的字段。下面是用户的实体模型Asp.net mvc 5 了解Asp.Net身份关键点,asp.net-mvc-5,entity-framework-6,asp.net-identity-2,Asp.net Mvc 5,Entity Framework 6,Asp.net Identity 2,我是一名Asp.net开发人员,但对Asp.net身份框架非常陌生。我一直在研究这个示例应用程序,也学习了一些关于身份的教程,但我仍然不能完全掌握这个概念。我对Asp.net成员身份有着非常坚定的控制,但身份似乎与成员身份完全不同。我将解释我迄今为止所做的工作 我正在创建一个简单的应用程序,其中我遵循代码优先的方法。我已经为用户创建了实体模型,该模型继承自IdentityUser,并有一些额外的字段。下面是用户的实体模型 public class User : IdentityUser {
public class User : IdentityUser
{
public int? CompanyID { get; set; }
public bool? CanWork { get; set; }
public bool? CanSearch { get; set; }
public Company Company { get; set; }
}
现在在示例中,人们使用名称ApplicationUser,但出于我自己的目的,我使用了名称User。用户或应用程序用户模型中还有一种方法
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<User> manager)
{
CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
我知道添加了一个额外的字段,但我无法理解重载构造函数的用途
上述混淆是次要的。我的主要困惑是,我很熟悉,当我创建实体模型时,我使用DbSet和DbContext,当我调用任何实体框架方法来访问数据库时,无论我遵循哪个方案,都会创建/删除数据库
在Identity中,哪个方法负责在数据库中创建Identity表?我有一个IdentityConfig文件,在其中声明ApplicationUserManager和ApplicationSignInManager。我还有一个启动文件。以前,我在App_Start文件夹中只有一个启动文件,当我运行应用程序并尝试访问任何标识方法时,它给了我错误,并且没有创建数据库。然后我将该类设置为partial,并在根目录下创建了另一个同名的partial类,然后异常消失并创建了表。那么Startup类负责创建标识表吗?AspNetUsers中会自动创建额外的列,如PhoneNumber、PhoneNumber确认、TwoFactorEnabled。我不需要这些额外的栏目。我能把这些拿走吗?我可以更改创建的标识表的名称吗
我知道这些都是非常基本的问题,不是一个问题,但如果我找不到一些基本的教程或初学者的例子,这将是非常有益的。我所发现的是描述那些我不需要的东西,或者让我感到困惑。我想了解并控制身份在我的应用程序中应该如何工作,但到目前为止,我似乎还没有完全掌握它,也无法根据我的需要进行调整。就像教程和例子教我如何造句,但我无法理解字母表(首先,您必须定义模型——正如您所做的那样——实现正确的接口。
假设您要为应用程序创建一个用户:
public class MyUser : IdentityUser<string, MyUserLogin, MyUserRole, MyUserClaim>
{
public string CompanyName { get; set; }
}
我为管理属于某个角色的用户定义了一个类型和类
public class MyUserRole : IdentityUserRole<string>
{
}
我们再次定义了要使用的用户、角色、登录名等。我们需要
UserStore
因为我们的UserManager需要一个
如果您计划管理角色并将角色与每个用户关联,则必须创建RoleStore
定义
public class MyRoleStore : RoleStore<MyRole, string, MyUserRole>
{
public DaufRoleStore(ApplicationDatabaseContext context) : base(context)
{
}
}
此类有一个静态方法,它将为您创建一个新的UserManager。有趣的是,您可以包括一些验证密码等可能需要的验证规则 最后一件事是创建一个或多个数据库上下文
public class MyContext : IdentityDbContext<MyUser, MyRole, string, MyUserLogin, MyUserRole, MyUserClaim>
{
public MyContext(): base("<your connection string here>")
{
}
public static MyContext Create()
{
return new MyContext();
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<MyUser>()
.ToTable("Users");
modelBuilder.Entity<MyRole>()
.ToTable("Roles");
modelBuilder.Entity<MyUserRole>()
.ToTable("UserRoles");
modelBuilder.Entity<MyUserClaim>()
.ToTable("UserClaims");
modelBuilder.Entity<MyUserLogin>()
.ToTable("UserLogins");
}
}
现在,您应该有一个startup类,用于引导您的东西:
[assembly: OwinStartup(typeof(ASPNETIdentity2.Startup))]
namespace ASPNETIdentity2
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.CreatePerOwinContext(MyContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
}
}
}
这是必需的,因为您要告诉您的环境,这是需要在启动时调用的启动类
现在,在控制器中,您只需参考您的UserManager
即可执行以下操作:
HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
它将在名为Migrations
的新文件夹中创建一个文件Configuration.cs
如果要创建数据库,需要打开该文件并将AutomaticMigrationsEnabled
更改为true:
public Configuration()
{
AutomaticMigrationsEnabled = true;
}
同样,从软件包管理器控制台
,您可以运行:
Update-Database
所有的表都将显示在数据库中。不要忘记连接字符串
您可以下载此文件以查看一切工作方式。你可以用一些其他信息来检查这些 这两个人的博客上有一些链接,你可以在那里学到所有这些东西 注意:
如果你想定制你环境中的每一个细节,你必须完成所有这些工作。哇。谢谢。你所做的细节非常容易理解,我真的很感谢你的努力。它简洁而又完整地描述了所有的事情。祝你过得愉快。很高兴我在某种程度上提供了帮助。祝你好运。我并不特别喜欢那些乱七八糟的东西,但我不喜欢它事情就是这样,干杯。
public DbSet<MyCustomer> Customers{ get; set; }
public static MyContext Create()
{
return new MyContext();
}
[assembly: OwinStartup(typeof(ASPNETIdentity2.Startup))]
namespace ASPNETIdentity2
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.CreatePerOwinContext(MyContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
}
}
}
[assembly: OwinStartup(typeof(ASPNETIdentity2.Startup))]
HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
Enable-Migrations
public Configuration()
{
AutomaticMigrationsEnabled = true;
}
Update-Database