我对asp.net MVC5中的用户身份验证非常困惑……我一直在参考这篇文章:
http://blogs.msdn.com/b/webdev/archive/2013/10/16/customizing-profile-information-in-asp-net-identity-in-vs-2013-templates.aspx
这个问题:
MVC 5自定义用户商店ASP.net标识-UserManager<TUser>是否可以访问角色?
并且完全知道在哪里。这是我的IdentityModel.cs 中的代码
namespace attempt_4.Models
{
public class ApplicationUser : IdentityUser
{
public string FirstName { get; set; }
}
public class MyUserStore : IUserStore<ApplicationUser>
{
}
public class ApplicationDbContext<ApplicationUser> : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection")
{
}
}
}
在控制器中,我试图用获取UserObject
var userManager = new UserManager<ApplicationUser>(new MyUserStore<ApplicationUser>(new ApplicationDbContext()));
var user = userManager.FindById(User.Identity.GetUserId());
这给我带来了大量的编译错误,大多数是以attempt_4.Models.MyUserStore<ApplicationUser>' does not implement interface member 'System.IDisposable.Dispose()
的形式出现的,但也有一个错误说ApplicationUser不能用作Type参数"TUser"。
目前我正在使用:
var id = User.Identity.GetUserId();
var user = db.Users.First(x => x.Id == id);
这不是最好的方式,毫无疑问,由于[Authorize]
,数据库已经被查询过了。
我不需要任何涉及角色或任何花哨的东西。。。只是想扩展User模型,并能够从其他模型中引用它来做这样的事情:db.Apartments.where(apt => apt.OwnerId == currentUserID)
。也就是说,将表链接到User表的最佳做法是什么?我应该在ApplicationUser类中有一个int id来查询吗?或者我应该只使用Guid?
您收到一个错误,因为您没有实现您所声明的接口(IUserStore)。也没有必要制作自己的UserStore,你可以使用开箱即用的:
new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()))
如果这不能满足您的要求,这里有一个关于如何实现ASP.NET Identity的好指南:http://odetocode.com/blogs/scott/archive/2014/01/20/implementing-asp-net-identity.aspx
此外,我认为[Authorize]
只是授权用户的cookie,而不是以任何方式查询数据库。