我想使用Asp.NET的Identity系统的某些部分来访问自定义数据库,但不是所有部分。 数据库部分并不太难,但我试图找出如何编写代码以将一些Identity方法用于我的自定义实现。例如,不同的项目之一是不使用UserManager密码哈希,而是使用其他一些第三方密码哈希函数。我想要利用的一些事情是cookie身份验证,密码验证器字段等。 所以,我试图做的第一件事就是看看标准的CreateAsync方法做了什么,它让我看到一个空白的行看起来像这样:
[AsyncStateMachine(typeof(UserManager<>.<CreateAsync>d__73))]
public virtual Task<IdentityResult> CreateAsync(TUser user, string password);
如何制作自定义创建 - 异步和密码验证功能? 哦,也是由自定义数据库&#39;我的意思是,我不想使用Identity附带的表,没有Roles,Claims,只有我自己的Users表。
答案 0 :(得分:1)
我最近这样做了,但不幸的是,这里有太多的代码要发布这里作为答案。
对于CreateAsync,您需要创建一个实现IUserStore<your custom user>, IUserPasswordStore<your custom user>
的自定义userstore类
那么你需要实现CreateAsync方法:
async Task<IdentityResult> IUserStore<your custom user>.CreateAsync(your custom user user, CancellationToken cancellationToken)
{
IdentityResult result;
var tsk = Task.Factory.StartNew(() => result = someDataAccessClass.SomeSaveUserToDatabaseFUnction(user));
return await tsk;
}
您可以在此时实现数据类并保存用户功能。
根据您的操作,密码验证会稍微复杂一些。
您必须创建一个继承自常规SignInManager的自定义SignInManager
。然后,只需使用您在安全方面做的任何事情来覆盖PasswordSignInAsync
方法。另请注意,您需要在UserManager上实现一些其他功能,例如查找用户异步等等。
另请注意,要使Identity Pipeline填写缺少的部分,您需要在startup.cs configureservices()方法中执行services.AddIdentity().AddUserStore().AddSignInManger
(以及您自定义的所有其他类),然后抛出{{1}进入你的配置方法。