当前位置:首页 > 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 组件 在 React 中,销毁组件通常涉及清理副作用(如事件监听器、定时器或订阅)以防止内存泄漏。以下是实现组件销毁的常见方法: 使用 useEffect 清理副作用 在函数组件…

react 如何引入jquery

react 如何引入jquery

引入 jQuery 到 React 项目 在 React 项目中引入 jQuery 可以通过多种方式实现,但需要注意 React 和 jQuery 操作 DOM 的方式可能冲突,因此建议仅在必要时使用…

如何降低react版本

如何降低react版本

降低 React 项目版本的步骤 检查当前 React 版本 运行以下命令查看项目中安装的 React 当前版本: npm list react 或 yarn list react 修改…

如何手写一个react

如何手写一个react

手写一个简单的 React 创建一个基础的 React 实现需要理解其核心概念:虚拟 DOM、组件、状态管理和渲染。以下是一个简化版的 React 实现。 创建虚拟 DOM 虚拟 DOM 是真实 D…

如何改造react

如何改造react

改造 React 项目的关键方法 分析当前项目结构 通过评估现有组件、状态管理和依赖项,明确需要改进的部分。使用工具如 webpack-bundle-analyzer 识别性能瓶颈。 升级 Reac…

react native如何

react native如何

React Native 基础知识 React Native 是一个由 Facebook 开发的框架,用于使用 JavaScript 和 React 构建跨平台移动应用。它允许开发者编写一次代码,同时…