【发布时间】:2015-08-18 07:30:43
【问题描述】:
我是一名 Asp.net 开发人员,但对 Asp.net Identity 框架非常陌生。我一直在研究示例应用程序并遵循了一些关于身份的教程,但我仍然无法完全掌握这个概念。我对 Asp.net 会员身份有非常坚定的控制,但 Identity 似乎与会员身份完全不同。我将解释我到目前为止所做的事情。
我正在创建一个简单的应用程序,我在其中遵循代码优先方法。我为 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。在 User 或 ApplicationUser 模型中还有一个方法是,
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;
}
我无法理解这种方法的目的。同样从一个示例中,我将以下模型用于角色,
public class Role : IdentityRole
{
public Role()
{
}
public Role(string roleName, string description)
: base(roleName)
{
this.Description = description;
}
public string Description { get; set; }
}
我知道添加了一个额外的字段,但我无法理解重载构造函数的目的。
上述混淆是次要的。我的主要困惑是我很熟悉,当我创建实体模型时,我使用 DbSet 和 DbContext,当我调用任何实体框架方法来访问数据库时,无论我遵循哪种方案,都会创建/删除数据库。
在 Identity 中,哪个方法负责在数据库中创建 Identity 表?我有一个 IdentityConfig 文件,我在其中声明了 ApplicationUserManager 和 ApplicationSignInManager。我还有一个启动文件。以前我在 App_Start 文件夹中只有一个启动文件,当我运行应用程序并尝试访问任何 Identity 方法时,它给了我错误并且没有创建数据库。然后我将该类设置为部分类,并在根目录中创建了另一个具有相同名称的部分类,然后异常消失并创建了表。那么Startup类负责创建Identity表呢? AspNetUsers 中自动创建了额外的列,例如 PhoneNumber、PhoneNumberConfirmed、TwoFactorEnabled。我不需要这些额外的列。我可以删除这些吗?我可以更改创建的身份表的名称吗?
我知道这些是非常基本的问题,根本不是一个问题,但如果我无法为初学者找到一些基本教程或示例,那将是非常有益的。我所发现的是描述那些我不需要或让我感到困惑的东西。我想了解并控制 Identity 在我的应用程序中应该如何工作,但到目前为止,在我看来,我既没有完全掌握它,也无法根据我的需要进行调整。它就像教程和示例正在教我如何造句,但我无法理解字母。 :(
【问题讨论】:
标签: asp.net-mvc-5 entity-framework-6 asp.net-identity-2