我一直在研究ASP.NET中用户身份验证的两个主要选项,在浏览了几篇文章后,我感到非常困惑。我最后一次涉足ASP.NET时,.NET框架仅在v.2.0上使用了Membership系统。我甚至不记得它是如何工作的,更不用说围绕所有这些新的Entity Framework和Identity的东西。
我喜欢能够使用外部登录(Facebook,Twitter等)和角色的声音,但严重的是,为什么这个废话如此复杂?!我认为ASP.NET应该让开发人员的生活更容易,但只是学习如何使用它似乎需要一个星期的时间!我已经落后于时间表(这是针对一个单一的项目),而我的主管正在了解我在多长时间内没有产生任何结果。
我只想要一种简单,易于学习和使用的方法来创建以下内容:
我目前有1.和2.只用HTML,CSS,jQuery和SQL实现,然后我开始登录页面,并意识到ASP.NET可能会为我做很多事情。但是如何??
也许我看起来不够努力,或者我太累了,工作过度而无法完全接受我所读过的内容,但我只想要一个简单,简洁解决方案涵盖所有这些基地在一个地方!淘到谷歌让我无处可去,因为我似乎必须阅读5篇不同的2000字文章才能理解所有这些内容!
任何可以帮助我的人都将成为我的新神!
答案 0 :(得分:1)
在阅读了关于这些内容的更多信息并花了最后8个小时之后,我终于成功地推出了自己的自定义身份提供商和数据库。正如蒂姆向我建议的那样,这比使用默认提供商和数据库要困难得多,但我现在几乎完全满意。如果我能弄清楚如何正确命名所创建的表格,我将非常满意这个解决方案。
对于今后遇到这篇文章的人,因为他们有同样的问题,基本步骤是:
Microsoft.AspNet.Identity.EntityFramework.dll
并将IdentityUser<TKey, TLogin, TRole, TClaim> : IUser<TKey>
的代码复制到您自己的自定义类中。PhoneNumberConfirmed
和TwoFactorEnabled
属性,然后为自定义列添加了我想要的属性。编写一个基本上如下的自定义<YourDbContextTypeName> : DbContext
类:
public class YourDbContext : DbContext
{
public IDbSet<IdentityRole> AspNetRoles { get; set; }
public IDbSet<IdentityUserClaim> AspNetUserClaims { get; set; }
public IDbSet<IdentityUserLogin> AspNetUserLogins { get; set; }
public IDbSet<IdentityUserRole> AspNetUserRoles { get; set; }
public IDbSet<FitAndStrongUser> AspNetUsers { get; set; }
public YourDbContext() : base("DefaultConnection")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<IdentityUserLogin>().HasKey<string>(l => l.UserId);
modelBuilder.Entity<IdentityRole>().HasKey<string>(r => r.Id);
modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.RoleId, r.UserId });
}
}
将Imran Baloch's custom IUserStore
, IUserPasswordStore
and IUserSecurityStampStore
类复制并粘贴到您自己的文件中。
不要忘记在你的文档中给予Imran应有的信誉,并在他的博客上留下一个好评,告诉他他的代码对你有多大帮助!我也不反对被提及,但我并不是为了这个信用而张贴这个...我发布它是希望一些可怜的闷棍会发现它有用并赢得了奖励。我不得不像我一样浪费一整天!
鉴于我已经为您完成了所有调试,如果是这样,这应该只需要几个小时。如果您愿意将PhoneNumberConfirmed
和TwoFactorEnabled
留在您的用户表格中,则可以改为IdentityUser
和IdentityDbContext
而不是一小时。只是不要忘记将自定义IdentityDbContext
个实例传递给您的UserStore
构造函数(那个小小的doozy花了我2个小时才弄明白)!
现在有人这么难以告诉我昨天吗?! :P