Abp 实现通过手机号注册用户

Python微信订餐小程序课程视频

https://blog.csdn.net/m0_56069948/article/details/122285951

Python实战量化交易理财系统

https://blog.csdn.net/m0_56069948/article/details/122285941

前言

Abp 的 Identity 模块,实现了用户的管理,但是对于国内来讲,很多场景不能很好适配。比如:通过手机号进行注册的场景。

Abp vnext Identity 以及 asp.net core identity  默认只有 Email 必填以及唯一的校验,缺少手机号必要的校验;对此我们需要进行适当的调整,以作适配。

准备

建议先参考 IdentityUserAppService 对用户注册的实现;

由于手机号验证的场景基本上是需要的,所以本次采用重写的方式,当然也可以参考其代码,自定义自己的实现。

Application

+ View Code?

| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 | public class PublicAccountAppService: IdentityUserAppService``{``public PublicAccountAppService(``IdentityUserManager userManager,``IIdentityUserRepository userRepository,``IIdentityRoleRepository roleRepository,``IOptions identityOptions) : base``(userManager, userRepository, roleRepository, identityOptions)``{ } public override async Task CreateAsync(``IdentityUserCreateDto input)``{``ValidateRegisterInput(input);``await CheckRegisterableByPhone(input.PhoneNumber);``return await base``.CreateAsync(input);``} private static void ValidateRegisterInput(IdentityUserCreateDto input)``{``if (input.PhoneNumber.IsNullOrWhiteSpace())``{``throw new AbpValidationException(``"Phone number is required for new users!"``,``new List``{``new ValidationResult(``"Phone number can not be empty!"``,``new []{``"PhoneNumber"``}``)``}``);``}``} private async Task CheckRegisterableByPhone(``string phoneNumber)``{``var isPhoneNumberExist = await _accountRepository.IsPhoneNumberExistAsync(phoneNumber);``if (isPhoneNumberExist)``{``throw new AbpValidationException(``"Phone number already exist!"``,``new List``{``new ValidationResult(``"Phone number already exist!"``,``new []{``"PhoneNumber"``}``)``}``);``}``}``} |

Domain

由于 IIdentityUserRepository 缺少对手机号是否存在的默认实现,我们可以新增对应Repository 来实现相关功能。

尽量遵守DDD 分层的原则。

1  public interface IAccountRepository
2  {
3         Task<bool> IsPhoneNumberExistAsync(string phoneNumber);
4     }

View Code

Repository

实现Domain 层定义的接口

 1  public class AccountRepository: IAccountRepository, ITransientDependency2  {3         private readonly IRepository \_identityUserRepository;4 5 public AccountRepository(IRepository identityUserRepository)6  {7 \_identityUserRepository = identityUserRepository;8  }9 
10 public async Task<bool> IsPhoneNumberExistAsync(string phoneNumber)
11  {
12 return await \_identityUserRepository.AnyAsync(
13 c => c.PhoneNumber == phoneNumber);
14  }
15 }

View Code

替换默认实例

我们已经完成了对 IdentityUserAppService 创建方法的重写,需要替换默认的接口实例对象,可以参考 Customizing Application Modules Overriding Services | Documentation Center | ABP.IO

    [Dependency(ReplaceServices = true)][ExposeServices(typeof(IIdentityUserAppService), typeof(IdentityUserAppService), typeof(PublicAccountAppService))]public class PublicAccountAppService: IdentityUserAppService{...}

View Code

其他

主要的修改已经调整完毕。但是由于AbpUser 表没有 PhoneNumber 的相关索引,可以自行通过 Migration 进行添加。

Abp 框架比较优秀,很多方面也算是最佳实践,推荐使用。

改动比较小,修改起来也比较方便;当然也可以完全重写 注册的方法。下次有时间可以再整理下通过手机号登陆的实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401116.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 开发不能创建目录

原来代码&#xff1a; File tempDir new File(path); //path 是一个参数if (!tempDir.exists()) {try {tempDir.mkdir(); //mkdirs 可创建多级目录&#xff0c;mkdir只能创建以及目录} catch (Exception ex) {Log.e("mkdir", "创建文件目录失败" ex.toS…

NumericUpDown使用备注

NumericUpDown使用 常用属性 DecimalPlaces 指示要显示的小数位数 Increment 每单击一下按钮时增减的数量 Maximum 最大值 Minimum 最小值转载于:https://www.cnblogs.com/blackice/archive/2012/11/12/2766417.html

关于Electron框架应用的安全测试

Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https://blog.csdn.net/m0_56069948/article/details/122285941 Electron框架应用的安全测试 0.Electron相关简介 electron.js是一个运行时框架&…

Exchange 2010 创建设备室邮箱

其实创建设备邮箱和创建会议室邮箱都差不多&#xff0c;只是在新建邮箱的时候&#xff0c;邮箱的类型选择的不一样&#xff1b;1、打开Exchange管理控制台&#xff0c;展开“收件人配置”选择“邮箱”节点&#xff1b;在中间空白的地方右击选择“新建邮箱”&#xff1b;或者在操…

AC日记——3的幂的和 51nod 1013

3的幂的和 思路&#xff1b; 矩阵快速幂&#xff1b; sn-1 3 1 sn * 1  0 1    1 来&#xff0c;上代码&#xff1a; #include <cstdio> #include <cstring> #include <iostream> #include <algorithm>using namespace…

简单的Excel导出(两种方式)

最近项目里面有个周报Excel导出的功能&#xff0c;为了解决这个问题&#xff0c;我显示调研Excel内核的方式实现了&#xff0c;但是被告知该方法有诸多弊端&#xff08;1、服务器需要装相应版本的Excel&#xff1b;2、如果程序中途出错服务器会有很多Excel进程&#xff09;&…

一款开源的文件搜索神器,终于不用记 find 命令了

Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https://blog.csdn.net/m0_56069948/article/details/122285941 这是 HelloGitHub 推出的《讲解开源项目》系列&#xff0c;用一篇文章带你快速上…

C2审核模式(c2 audit mode)

C2审核模式&#xff08;c2 audit mode&#xff09;SQL Server C2 Audit 是为了满足美国国防部针对计算机的安全访问的安全评级要求而引入的。 SQL C2Audit 可以记录shutdown,restart,成功和失败的Login,成功或者失败访问数据库对象&#xff0c;所欲数据定义的执行&#xff0c;数…

project开发的程序设计与逻辑设计

非常多时候我们要做庞大project, 就像一棵大树, 方方面面都有自己的细枝末节&#xff0c;而作为开发员的我们&#xff0c;无法时时刻刻去保持对程序的全面认知&#xff0c;所以我们要把程序设计与逻辑设计区分开来。 那么什么是程序设计和逻辑设计&#xff0c;举个样例来说&…

Java中截取文件名不要后缀

例如&#xff1a;File f new File("d:/d/abc.txt");f.getName()获得的是abc.txt,如果不需要后缀.txt&#xff0c;只要abc可以这样做&#xff1a; String test f.getName().substring(0,f.getName().lastIndexOf("."));转载于:https://www.cnblogs.com/lu…

开发者必读:2022年移动应用趋势洞察白皮书

Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https://blog.csdn.net/m0_56069948/article/details/122285941 华为开发者联盟与艾瑞咨询联合发布《2022年移动应用趋势洞察白皮书》&#xff0c;本…

JS的注意点

JS的跨域访问问题。 http://www.cnblogs.com/rush/archive/2012/05/15/2502264.html JS能操作的范围:HTTP协议的内容。但是不能直接访问response。 JS不能操作哪些内容。比如HTTP的一些内容。但是能操作cookie。 JS可以直接发送Web Service的SOAP请求。 CAUTION: 不仅仅是JS, A…

NYOJ 1009 So Easy[Ⅰ]【简单题】

/* 题目大意&#xff1a;求三角形的外接圆 解题思路&#xff1a;c/sin(C)2R,先求出cos&#xff0c;在求出sin 关键点&#xff1a;直接调用库 解题人&#xff1a;lingnichong 解题时间&#xff1a;2014-10-18 10:19:33 解题体会&#xff1a;简单题 */ So Easy[Ⅰ] 时间限制&…

Java 阶段面试 知识点合集 - 我们到底能走多远系列(15)

我们到底能走多远系列&#xff08;15&#xff09; 扯淡&#xff1a;这些知识点来源是通过面试涉及到的&#xff0c;面的公司不多&#xff0c;知识点涉及也不多&#xff0c;我每次面试后都在备忘录里写下有用的东西&#xff0c;集合起来分享一下&#xff0c;因为是知识点&#x…

对比学习 ——simsiam 代码解析。

Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https://blog.csdn.net/m0_56069948/article/details/122285941 ​ 目录 1 &#xff1a; 事先准备 。 2 &#xff1a; 代码阅读。 2.1: 数据读取…

wiki常用语法

为什么80%的码农都做不了架构师&#xff1f;>>> 说明 输入 效果 作用在任何地方 斜体字 斜体字 斜体字 粗体字 粗体字 粗体字 粗体加斜体 粗体加斜体 粗体加斜体 下划线 &#xff08;推荐替代斜体&#xff09; <u>下划线</…

java===Runtime类

package 常用类.RunTime;import java.io.IOException;/**Runtime:没有构造方法摘要&#xff0c;说明该类不可以创建对象&#xff0c;又发现* 还有非静态方法&#xff0c;说明该类应该提供静态的放回该类对象的方法。而且只有一个&#xff0c;说明Runtime类使用了单例设计* 模式…

.NET 7 预览版2 中的 ASP.NET Core 更新

Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https://blog.csdn.net/m0_56069948/article/details/122285941 .NET 7 预览版2 现已推出&#xff0c;其中包括对ASP.NET Core 的许多重大改进。 以…

【ASP.NET Web API教程】3.3 通过WPF应用程序调用Web API(C#)

注&#xff1a;本文是【ASP.NET Web API系列教程】的一部分&#xff0c;如果您是第一次看本博客文章&#xff0c;请先看前面的内容。 3.3 Calling a Web API From a WPF Application (C#) 3.3 通过WPF应用程序调用Web API(C#) 本文引自&#xff1a;http://www.asp.net/web-api/…

java开发过程中的命名规范

为什么80%的码农都做不了架构师&#xff1f;>>> 最近在读项目的过程中&#xff0c;发现好多同事的代码并不是很规范&#xff0c;有的包名也按照了驼峰的写法&#xff0c;虽说这样不是不行&#xff0c;但个人认为开发过程中应该遵守这些规范&#xff0c;现整理规范如…