Envrionment:Visual Studio 2013,ASP.NET MVC 5
在我将要开发的基于MVC5的新项目中,我需要使用以自己的方式存储用户名,密码和角色的自定义数据库。我正在互联网上搜索自定义身份验证的示例。看起来像旧式的会员提供商"课程已被新的"身份"机制。
然而,找到一个好的循序渐进的例子已被证明是徒劳的。有一些链接(今年发布)讨论了实现自定义IPrincipal
和DbContext
类。其他一些链接谈论实施IUserLoginStore
和IUserPasswordStore
。其他一些人则暗示要实施IUser
,IUserStore
接口。
也许最后一个选项是需要的。有人可以指导我这些步骤或指向任何有简单示例的链接吗?类似的东西:
MyUser
IUser
MyUserStore
IUserStore
web.config
以使用MyUserStore
DefaultConnection
移除web.config
,因为不需要问候。
答案 0 :(得分:4)
首先,停下来。不要再考虑"自定义身份验证"。您不需要自定义身份验证,只需要自定义存储身份验证数据。
ASP.NET Identity从身份验证过程中抽象出了身份验证的存储机制。有几个接口遵循模式IxxxStore ..例如IUserStore,IRoleStore等......
您可以在此处找到有关此内容的更多信息,以及各种数据库的自定义实现,您可以根据自己的需要进行转换。
http://odetocode.com/blogs/scott/archive/2014/01/20/implementing-asp-net-identity.aspx
例如,这是一个RavenDB实现,它使用单个类中的所有各种接口。
但是,所有这些都假设您确实需要完全不同地存储数据。如果您只需要将数据存储在不同的列中,那么它可能就像在IdentityContext中覆盖OnModelCreating并更改正在使用的列的名称一样简单。
答案 1 :(得分:0)
ad.1。
public class ApplicationUser :IUser
{
public string Id
{
get;
set;
}
public string UserName
{
get;
set;
}
}
ad.2。
public class MyStore : IUserStore<ApplicationUser>, IUserPasswordStore<ApplicationUser>, IUserSecurityStampStore<ApplicationUser>, IUserEmailStore<ApplicationUser>
{
... //implement all interfaces here
}
广告。 3。 现在您可以创建applicationUserManagerService(您将需要IdentityMessageService和IDataProtectionProvider):
var applicationUserManagerService = new ApplicationUserManagerService(new MyStore(), emailService, dataProtectionProvider);
尝试使用IoC并注册您的IUserStore(我这样做了 - 链接如下):
unityContainer.RegisterType<IUserStore<ApplicationUser>, MyStore>();
在这里检查我的答案(我在那里使用int作为UserId): AspIdentiy ApplicationUserManager is Static, how to extend so it participates in my IoC framework?