ABP Vnext 批量导入用户,解决密码加密问题

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ABP Vnext 批量导入用户,解决密码加密问题相关的知识,希望对你有一定的参考价值。

因为ABP Vnext在密码加密方面使用的盐加密的方式,底层的加密方式让人摸不着头脑。如何需要批量导入用户的时候,这个密码问题就很头疼。

假设,已经有一个集合List<entity>的用户数据了,此时进行循环取出一条用户信息,进行 abpUser实体的转换。代码如下

//判断密码字段是否为空
            if (string.IsNullOrEmpty(entity.PasswordHash))
            
                entity.Remark = "密码不能为空";
                entityRepeatList.Add(entity);
                continue;
            
            //这是扩展字段的信息,如果没有可以删除
            entity.SetProperty("EmpNo", entity.EmpNo);
            entity.SetProperty("WeChat", entity.WeChat);
            
            await _identityOptions.SetAsync();
            //UsersInfoDto 自己模仿着 IdentityUser 写一个
            var user = ObjectMapper.Map<UsersInfoDto, Volo.Abp.Identity.IdentityUser>(entity);
            entity.PasswordHash = _passwordHasher.HashPassword(user, entity.PasswordHash);


            var userPasswordHash = ObjectMapper.Map<UsersInfoDto, Volo.Abp.Identity.IdentityUser>(entity);
            await _identityUserRepository.InsertAsync(userPasswordHash);
            //此时插入数据,并不立即生效,没有触发savachange(),本接口遍历完毕,才触发保存,所以不用担心每次重复打开关闭连接池的问题

用到的构造函数如下:

private readonly IOptions<IdentityOptions> _identityOptions;
 private readonly IPasswordHasher<Volo.Abp.Identity.IdentityUser> _passwordHasher;

最重要的一点是,using引用命名空间的时候,优先选择 Volo.Abp.xxx的命名,不要选择using Microsoft.AspNetCore.Identity....微软自带的,因为abp默认继承了Microsoft,会造成代码冲突。

以上是关于ABP Vnext 批量导入用户,解决密码加密问题的主要内容,如果未能解决你的问题,请参考以下文章

Abp.io(vNext)开发日志:单页面应用与外部/社交登录

Abp Vnext Vue3 的版本实现

Abp Vnext Vue3 的版本实现

ABP vNext微服务架构详细教程——基础服务层

Abp vnext 使用sql2005sql2008等脚本报错解决

Abp Vnext3 vue-admin-template(二用户退出)