0

0

密码重置功能:前端

心靈之曲

心靈之曲

发布时间:2024-10-03 21:48:43

|

685人浏览过

|

来源于dev.to

转载

密码重置功能:前端

前端

与后端部分相比,前端部分非常简单。我需要做的就是创建一个模式,并使用它发送数据两次。

  • 首先发送电子邮件将otp发送至
  • 然后发送otp和新密码进行更改

为了创建模式,我从我早期项目 chat-nat 的 messagemodal 组件中复制了一些代码,即用于封装模式的类名。

规划

我会添加“忘记密码?”登录页面上的按钮,并设置 onclick 处理程序以打开模态

在请求之前,我需要使用布尔状态来表示 otp 是否已发送到用户的电子邮件。我将状态命名为 otpsent

立即学习前端免费学习笔记(深入)”;

NT80 购物系统
NT80 购物系统

功能说明:1 会员可申请开店功能2 购买在线扣除金额3 冲值卡自动生成4 支持2级分类5 数据库压缩和备份6 会员分5个级别7 商品带讨论8 自带融合论坛,可关闭打开9 密码找回功能10 新闻``滚动新闻``帮助中心11 后台设置前台会员的上传权限12 可关闭/打开商店13 会员自助发布商品功能14 用户问题咨询管理

下载
  • 如果 !isotpsent -> 只是询问电子邮件地址,发送 api 请求,则如果成功 setotpsent(true)
  • 如果 isotpsent -> 现在还要求输入 otp 和新密码,那么如果成功,则关闭模式

以下是我从该项目的现有前端重用的一些组件和挂钩:

  • box -> 它将我的登录和注册页面整齐地包装到一张卡片中,以页面为中心,在这里重用,标题为“密码重置
  • authform -> 只是一个表单,但我对其进行编码以在我们等待服务器响应时禁用提交按钮并将按钮文本设置为“正在加载...”
  • forminput -> 带有自己标签的输入字段,带有值设置器和 onchange 处理程序,可选带有 isrequired 布尔值
  • 使用axios -> 自定义挂钩来处理来自需要令牌刷新的服务器的响应。 apireq 函数用于正常请求发送,一些自定义错误处理用于显示alert() 和刷新令牌,refreshreq 函数用于刷新身份验证令牌并再次尝试初始请求。

这是模态的完整代码:

// src/components/passwordresetmodal.tsx
import react, { usestate } from "react"
import authform from "./authform";
import forminput from "./forminput";
import box from "./box";
import { useaxios } from "../hooks/useaxios";

interface formdata {
    email: string,
    new_password: string,
    otp: string,
}

interface props {
    isvisible: boolean,
    onclose: () => void,
}

const passwordresetmodal: react.fc = ({ isvisible, onclose }) => {
    const [formdata, setformdata] = usestate({
        email: "",
        new_password: "",
        otp: ""
    });
    const [isloading, setloading] = usestate(false);
    const [isotpsent, setotpsent] = usestate(false);
    const { apireq } = useaxios();

    const handleclose = (e: react.mouseevent) => {
        if ((e.target as htmlelement).id === "wrapper") {
            onclose();

            // could have setotpsent(false), but avoiding it in case user misclicks outside
        }
    };

    const handlechange = (e: react.changeevent) => {
        const { name, value } = e.target;
        setformdata({
            ...formdata,
            [name]: value,
        });
    };

    const handlesubmit = async (e: react.formevent) => {
        e.preventdefault();
        setloading(true);

        if (!isotpsent) { // first request for sending otp,
            const response = await apireq("post", "/api/reset-password", formdata)

            if (response) {
                alert("otp has been sent to your email");
                setotpsent(true);
            }
        } else { // then using otp to change password
            const response = await apireq("put", "/api/reset-password", formdata)

            if (response) {
                alert("password has been successfully reset\nplease log in again");

                // clear the form
                setformdata({
                    email: "",
                    otp: "",
                    new_password: "",
                })

                // close modal
                onclose();
            }
        }

        setloading(false);
    };

    if (!isvisible) return null;

    return (
        
{isotpsent && (<> )}
) } export default passwordresetmodal

这是在登录表单中处理模式的条件渲染的方式

// src/pages/auth/Login.tsx
import PasswordResetModal from "../../components/PasswordResetModal";

const Login: React.FC = () => {
    const [showModal, setShowModal] = useState(false);

    return (
        
{/* link to the register page here */} setShowModal(false)} />
)

我们完成了!至少我是这么想的。

在我的开发环境中运行该应用程序时,我发现了一个错误,如果后端已经运行很长时间,则电子邮件将无法通过。

我们将在下一篇文章中修复此错误

相关专题

更多
alert怎么实现换行
alert怎么实现换行

alert通过使用br标签来实现换行。更多关于alert相关的问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

489

2023.11.07

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

65

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

42

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

35

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

41

2025.12.31

出现404解决方法大全
出现404解决方法大全

本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

200

2025.12.31

html5怎么播放视频
html5怎么播放视频

想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

9

2025.12.31

关闭win10系统自动更新教程大全
关闭win10系统自动更新教程大全

本专题整合了关闭win10系统自动更新教程大全,阅读专题下面的文章了解更多详细内容。

8

2025.12.31

阻止电脑自动安装软件教程
阻止电脑自动安装软件教程

本专题整合了阻止电脑自动安装软件教程,阅读专题下面的文章了解更多详细教程。

3

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.8万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 778人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号