当前位置:首页 > React

react实现短信验证注册

2026-01-27 12:16:42React

实现短信验证注册的步骤

后端API准备
确保已有发送短信验证码的API接口,通常需要手机号作为参数,返回成功或失败状态。验证码应由服务端生成并存储(如Redis),设置合理有效期(如5分钟)。

前端组件设计
创建包含手机号输入框、验证码输入框和获取验证码按钮的表单。使用React的useState管理表单状态:

react实现短信验证注册

const [phone, setPhone] = useState('');
const [code, setCode] = useState('');
const [countdown, setCountdown] = useState(0);

倒计时逻辑
点击获取验证码按钮后触发倒计时,防止重复请求:

const handleSendCode = () => {
  if (!phone) return alert('请输入手机号');
  if (countdown > 0) return;

  // 调用发送验证码API
  api.sendSmsCode(phone).then(() => {
    setCountdown(60);
    const timer = setInterval(() => {
      setCountdown(prev => (prev > 0 ? prev - 1 : (clearInterval(timer), 0)));
    }, 1000);
  });
};

表单验证与提交
提交时验证手机号和验证码格式,调用注册API:

react实现短信验证注册

const handleSubmit = (e) => {
  e.preventDefault();
  if (!/^\d{6}$/.test(code)) return alert('验证码格式错误');
  api.register({ phone, code }).then(res => {
    // 注册成功处理
  });
};

安全增强措施
对手机号格式做前端校验(如正则/^1[3-9]\d{9}$/),敏感接口增加防重放攻击机制。服务端需校验验证码与手机号是否匹配。

关键代码示例

完整表单组件示例:

function RegisterForm() {
  const [form, setForm] = useState({ phone: '', code: '' });
  const [countdown, setCountdown] = useState(0);

  const sendCode = () => {
    if (!/^1\d{10}$/.test(form.phone)) return alert('手机号无效');
    if (countdown > 0) return;

    api.sendSmsCode(form.phone).then(() => {
      setCountdown(60);
      const timer = setInterval(() => {
        setCountdown(v => v > 0 ? v - 1 : (clearInterval(timer), 0));
      }, 1000);
    });
  };

  const submit = () => {
    if (!/^\d{6}$/.test(form.code)) return alert('验证码为6位数字');
    api.register(form).then(() => {
      // 跳转登录页
    });
  };

  return (
    <form>
      <input 
        value={form.phone}
        onChange={e => setForm({...form, phone: e.target.value})}
        placeholder="手机号"
      />
      <div>
        <input 
          value={form.code}
          onChange={e => setForm({...form, code: e.target.value})}
          placeholder="验证码"
        />
        <button 
          type="button" 
          onClick={sendCode}
          disabled={countdown > 0}
        >
          {countdown > 0 ? `${countdown}s后重试` : '获取验证码'}
        </button>
      </div>
      <button type="button" onClick={submit}>注册</button>
    </form>
  );
}

注意事项

  • 生产环境应使用HTTPS协议传输数据
  • 验证码建议包含字母数字混合,提高安全性
  • 重要操作(如修改密码)需二次验证
  • 前端校验需与后端校验保持一致,不能替代服务端验证

标签: 短信react
分享给朋友:

相关文章

如何提高react

如何提高react

优化性能 使用React.memo对组件进行记忆化处理,避免不必要的重新渲染。对于类组件,可以使用PureComponent来达到类似效果。 利用useMemo缓存计算结果,避免重复计算。对于函数或…

react路由如何配置

react路由如何配置

React 路由配置方法 安装 React Router 使用 npm 或 yarn 安装 React Router 的 DOM 版本: npm install react-router-dom #…

webstorm如何运行react

webstorm如何运行react

运行 React 项目的方法 在 WebStorm 中运行 React 项目需要确保项目已正确配置,并且依赖项已安装。以下是具体操作步骤: 确保项目依赖已安装 打开终端(Terminal),导航到项…

react如何提交表单

react如何提交表单

表单提交的基本方法 在React中提交表单通常通过控制组件状态和事件处理实现。表单数据通过onSubmit事件捕获,并阻止默认提交行为以避免页面刷新。 import { useState } fro…

react run如何搭配

react run如何搭配

运行 React 项目的常见方法 使用 create-react-app 脚手架 通过官方脚手架工具快速初始化项目并运行开发服务器: npx create-react-app my-app cd…

react如何npm如何安装

react如何npm如何安装

安装 React 项目 确保已安装 Node.js(建议版本 16 或更高)。通过以下命令检查 Node.js 和 npm 是否已安装: node -v npm -v 使用 Create React…