概要

整体流程

前端

页面代码

请求验证码和登录的 service (src/services/login.js)

处理登录的 model (src/models/login.js)

后端

短信验证码的处理

生成固定长度的数字

调用短信接口

保存已经验证码, 以备验证用

登录验证

FAQ

antd 版本问题

可以优化的点

概要

最近使用 antd pro 开发项目时遇到个新的需求, 就是在登录界面通过短信验证码来登录, 不使用之前的用户名密码之类登录方式.

这种方式虽然增加了额外的短信费用, 但是对于安全性确实提高了不少. antd 中并没有自带能够倒计时的按钮,

但是 antd pro 的 ProForm components 中倒是提供了针对短信验证码相关的组件.

组件说明可参见: https://procomponents.ant.design/components/form

整体流程

通过短信验证码登录的流程很简单:

请求短信验证码(客户端)

生成短信验证码, 并设置验证码的过期时间(服务端)

调用短信接口发送验证码(服务端)

根据收到的短信验证码登录(客户端)

验证手机号和短信验证码, 验证通过之后发行 jwt-token(服务端)

前端

页面代码

1 import React, { useState } from 'react'; 2 import { connect } from 'umi'; 3 import { message } from 'antd'; 4 import ProForm, { ProFormText, ProFormCaptcha } from '@ant-design/pro-form'; 5 import { MobileTwoTone, MailTwoTone } from '@ant-design/icons'; 6 import { sendSmsCode } from '@/services/login'; 7 8 const Login = (props) => { 9 const [countDown, handleCountDown] = useState(5);10 const { dispatch } = props;11 const [form] = ProForm.useForm();12 return (13 19 dom.pop(),26 submitButtonProps: {27 size: 'large',28 style: {29 width: '100%',30 },31 },32 onSubmit: async () => {33 const fieldsValue = await form.validateFields();34 console.log(fieldsValue);35 await dispatch({36 type: 'login/login',37 payload: { username: fieldsValue.mobile, sms_code: fieldsValue.code },38 });39 },40 }}41 >42 ,46 }}47 name="mobile"48 placeholder="请输入手机号"49 rules={[50 {51 required: true,52 message: '请输入手机号',53 },54 {55 pattern: new RegExp(/^1[3-9]\d{9}$/, 'g'),56 message: '手机号格式不正确',57 },58 ]}59 />60 ,64 }}65 countDown={countDown}66 captchaProps={{67 size: 'large',68 }}69 name="code"70 rules={[71 {72 required: true,73 message: '请输入验证码!',74 },75 ]}76 placeholder="请输入验证码"77 onGetCaptcha={async (mobile) => {78 if (!form.getFieldValue('mobile')) {79 message.error('请先输入手机号');80 return;81 }82 let m = form.getFieldsError(['mobile']);83 if (m[0].errors.length > 0) {84 message.error(m[0].errors[0]);85 return;86 }87 let response = await sendSmsCode(mobile);88 if (response.code === 10000) message.success('验证码发送成功!');89 else message.error(response.message);90 }}91 />92 93

94 );95 };96 97 export default connect()(Login);

java antd实现登录,基于 antd pro 的短信验证码登录相关推荐

  1. cas5.3.9自定义手机短信验证码登录

    cas自定义多种登录方式 cas添加手机短信验证码登录 cas添加手机短信验证码登录 全部基于SpringBoot,以及SpringWebflow开发,请在有此基础再进行学习! 添加Maven依赖 & ...

  2. java短信验证码登录功能设计与实现

    前言 现在不管是各类的网站,还是大小社交app,登录方式是越来越多了,其中基于短信验证码的登录可以说是各类app必不可少的方式,短信验证码登录以其高效,安全,便捷等特性受到许多用户的青睐 业务案例 如 ...

  3. 手把手带你在集成SpringSecurity的SpringBoot应用中添加短信验证码登录认证功能

    本文目录 前言 1 自定义AuthenticationToken类 2 自定义AuthenticationProvider类 3 自定义MobilePhoneAuthenticationFilter ...

  4. 还在开发短信验证码登录?试试(本机号码一键登录)

    点击上方蓝字关注我们 技术总监面试,提问:Redis热点key解决方案 一. 关于秒验(一键登录)基本原理 秒验(一键登录)产品整合了三大运营商特有的数据网关认证能力,升级短信验证码体验,应用于用户注 ...

  5. 5.Spring Security 短信验证码登录

    Spring Security 短信验证码登录 在 Spring Security 添加图形验证码一节中,我们已经实现了基于 Spring Boot + Spring Security 的账号密码登录 ...

  6. OAuth2.0 - 自定义模式授权 - 短信验证码登录

    一.OAuth2.0 - 自定义模式授权 上篇文章我们分析了目前的情况,演示了微服务的大环境下在保证安全的情况下通过SpringGateWay实现统一的鉴权处理,但是前面的演示中,我们都是基于用户名密 ...

  7. 手机发送短信验证码登录完整实例

    项目需求 后台生成随机6位数作为验证码,发送给手机,同时将验证码存入缓存,用户登录时验证输入的验证码是否过期或者是否正确. 一.发送短信 1.了解短信发送 通过发送短信的API,建立一个URL类的对象 ...

  8. 短信验证码登录流程思路及详细步骤

    点击蓝色"java大数据修炼之道"关注我哟加个"星标",每晚21:00,一起学技术 来源: blog.csdn.net/classabcd/article/de ...

  9. 短信验证码登录,以及第三方登录

    短信验证码登录 首先去阿里云服务器开通短信服务功能,进入短信服务界面 点击国内消息,申请一个签名和模板 申请一个AccessKey,并且将短信服务的权限加入其中 加入相关的依赖 <depende ...

最新文章

  1. 关于数据库,你可能最想知道的几件事
  2. opencv6.1-imgproc图像处理模块之平滑与形态学操作
  3. if you receive money from others
  4. CF-346 D. Robot Control(反向建图spfa)
  5. 小明系列问题――小明序列(LIS)
  6. 英语口语 Week15 TuesDay
  7. php爆数据库,php+MySql注入非暴力爆数据库表段
  8. python 获取cpu使用率_如何在python中获取过去10分钟的cpu使用率
  9. S32DS for PowrPC中对dcc编译器的支持
  10. 排列组合计算问题中的卡塔兰数(Catalan Number)
  11. 实体框架 6.0:异步、IQueryable操作符和特性改进
  12. 统计自然语言处理梳理一:分词、命名实体识别、词性标注
  13. Java自动化测试系列[v1.0.1][PO设计模式]
  14. Tomcat架构解析之Digester
  15. xp系统从u盘启动计算机,联想xp系统如何设置U盘启动_联想xp通过bios设置U盘启动的步骤...
  16. 使用CCRenderTexture来创建动态纹理
  17. 学习日记day22 平面设计 构图
  18. 随机游走 推荐系统论文阅读
  19. 使用Consol线连接路由器
  20. G711(PCM/PCMA/PCMU),G721,G723,G729等 音频编解码

热门文章

  1. Mysql select into outfile NULL值导出的处理方法
  2. 远程服务器概念,远程服务
  3. mysql 小类型_mysql 数据类型
  4. cvNamedWindow与namedWindow,cvShowImage与inshow的区别
  5. NFS 服务器配置说明
  6. python3实现抓取网页资源的 N 种方法(内附200GPython学习资料)
  7. linux基本操作之目录、vi等
  8. 基本权限管理框架,开通淘宝支付
  9. Python的matplotlib(2)
  10. RabbitMQ高级指南:从配置、使用到高可用集群搭建