将Asp.NET Identity与自定义用户管理器/数据库一起使用

问题描述 投票:1回答:1

我想使用Asp.NET的Identity系统的某些部分来访问自定义数据库,但不是所有部分。数据库部分并不太难,但我试图找出如何编写代码以将一些Identity方法用于我的自定义实现。例如,不同的项目之一是不使用UserManager密码哈希,而是使用其他一些第三方密码哈希函数。我想要利用的一些事情是cookie身份验证,密码验证器字段等。所以,我试图做的第一件事是看看标准的CreateAsync方法做了什么,它让我看到一个空行这样的事情:

[AsyncStateMachine(typeof(UserManager<>.<CreateAsync>d__73))]
public virtual Task<IdentityResult> CreateAsync(TUser user, string password);

如何进行自定义创建 - 异步和密码验证功能?哦,也是'自定义数据库'我的意思是,我不想使用Identity附带的表,没有角色,声明,只有我自己的用户表就是全部。

asp.net identity
1个回答
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上实现一些其他功能,例如find user async和类似的东西。

另请注意,要使Identity Pipeline填充缺少的部分,您需要在startup.cs configureservices()方法中执行services.AddIdentity().AddUserStore().AddSignInManger(以及您自定义的所有其他类),然后将app.UseIDentity()也放入configure方法中。

© www.soinside.com 2019 - 2024. All rights reserved.