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)开发日志:单页面应用与外部/社交登录