react antd 实现修改密码(原密码,新密码,再次输入新密码,新密码增加正则复杂度校验)

先看样子

在这里插入图片描述
组件代码:

import React, { useState, useEffect } from 'react'
import { Row, Col, Modal, Spin, Input, Button, message, Form } from 'antd'
import { LockOutlined, EyeTwoTone, EyeInvisibleOutlined } from '@ant-design/icons'
import * as Serve from '@/serve/Serve/Serve'
// 添加弹窗
import { history } from 'umi'
export default function ({ modalViPassword, onCancelPassword, firstLoginFlag = false }) {
    const [form] = Form.useForm()
    // 修改密码
    const [loadingPassword, setloadingPassword] = useState(false)
    const iconRender = visible => (visible ? <EyeTwoTone /> : <EyeInvisibleOutlined />)
    const modalCancelPassword = () => {
        form.resetFields()
        setloadingPassword(false)
    }
    const goLoginFun = () => {
        IPServe.systemlLogout()
        const href = '/AAAA/mainlogin'
        history.push({
            pathname: href,
        })
    }
    const onOkPassword = async () => {
        form.validateFields().then(async values => {
            let { oldPassword, newPassword,  } = form.getFieldsValue()

            modalCancelPassword()

        })
    }
    return (
        modalViPassword && (
            <Modal visible={modalViPassword} footer={null} destroyOnClose closable={false} width={600} title={'密码修改'} onCancel={modalCancelPassword}>
                <Spin spinning={loadingPassword}>
                    <Form initialValues={{}} labelCol={{ span: 6 }} wrapperCol={{ span: 18 }} form={form} autoComplete="off" colon={false}>
                        {!firstLoginFlag && (
                            <Row style={{ width: '88%', margin: '0px auto 10px', display: 'flex', alignItems: 'center' }}>
                                <Col span={24}>
                                    <Form.Item
                                        name="oldPassword"
                                        label="原密码:"
                                        rules={[
                                            {
                                                required: true,
                                                message: '请输入原密码!',
                                            },
                                        ]}
                                    >
                                        <Input.Password
                                            size="large"
                                            placeholder="请输入原密码"
                                            prefix={<LockOutlined style={{ color: '#ec5e59' }} />}
                                            iconRender={iconRender}
                                        />
                                    </Form.Item>
                                </Col>
                            </Row>
                        )}
                        <Row style={{ width: '88%', margin: '0px auto 10px', display: 'flex', alignItems: 'center' }}>
                            <Col span={24}>
                                <Form.Item
                                    name="newPassword"
                                    label="新密码:"
                                    rules={[
                                        {
                                            required: true,
                                            message: '请输入新密码!',
                                        },
                                        {
                                            pattern: /(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[^a-zA-Z0-9]).{8,20}/,
                                            message: '请输入8-20位数的密码,其中包含大小写字母、数字和特殊符号四种'
                                        },
                                    ]}
                                >
                                    <Input.Password
                                        size="large"
                                        placeholder="请输入新密码"
                                        prefix={<LockOutlined style={{ color: '#ec5e59' }} />}
                                        iconRender={iconRender}
                                    />
                                </Form.Item>
                            </Col>
                        </Row>
                        <Row style={{ width: '88%', margin: '0px auto 10px', display: 'flex', alignItems: 'center' }}>
                            <Col span={24}>
                                <Form.Item
                                    name="newPassword2"
                                    label="复输新密码:"
                                    rules={[
                                        {
                                            required: true,
                                            message: '请再次输入新密码!',
                                        },
                                        {
                                            pattern: /(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[^a-zA-Z0-9]).{8,20}/,
                                            message: '请输入8-20位数的密码,其中包含大小写字母、数字和特殊符号四种'
                                        },
                                        ({ getFieldValue }) => ({
                                            validator(_, value) {
                                                if (
                                                    !value ||
                                                    (getFieldValue('newPassword') && getFieldValue('newPassword').trim()) === (value && value.trim())
                                                ) {
                                                    return Promise.resolve()
                                                }
                                                return Promise.reject(new Error('两次新密码请保持一致!'))
                                            },
                                        }),
                                    ]}
                                >
                                    <Input.Password
                                        size="large"
                                        placeholder="请再次输入新密码"
                                        prefix={<LockOutlined style={{ color: '#ec5e59' }} />}
                                        iconRender={iconRender}
                                    />
                                </Form.Item>
                            </Col>
                        </Row>
                    </Form>
                    <Row justify="end" style={{ marginTop: '15px' }}>
                        <Button type="primary" style={{ marginRight: '15px' }} onClick={onOkPassword}>
                            修改
                        </Button>
                        <Button type="ghost" style={{ backgroundColor: '#fff' }} onClick={modalCancelPassword}>
                            取消
                        </Button>
                    </Row>
                </Spin>
            </Modal>
        )
    )
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
实现登录记住密码功能的思路可以参考以下步骤: 1. 在登录页面中添加“记住密码”选项,使用 React 实现复选框组件。 2. 当用户登录成功并勾选了“记住密码”选项时,将用户名和密码保存到 electron-store 中。需要注意的是,密码需要加密存储,可以使用一些常见的加密算法(如 AES)进行加密。 3. 当用户下一次打开应用时,检查 electron-store 中是否存在保存的用户名和密码。如果存在,则自动填充用户名和密码,并使用保存的密码进行登录。 具体实现可以参考以下代码: 1. 在登录页面中添加“记住密码”选项: ```jsx import React, { useState } from 'react'; import { Checkbox } from 'antd'; const LoginForm = () => { const [username, setUsername] = useState(''); const [password, setPassword] = useState(''); const [remember, setRemember] = useState(false); const handleLogin = () => { // 登录逻辑 if (remember) { // 保存用户名和密码 const encryptedPassword = encrypt(password); // 加密密码 const userInfo = { username, password: encryptedPassword }; store.set('userInfo', userInfo); } }; return ( <div> <input type="text" value={username} onChange={e => setUsername(e.target.value)} /> <input type="password" value={password} onChange={e => setPassword(e.target.value)} /> <Checkbox checked={remember} onChange={e => setRemember(e.target.checked)}>记住密码</Checkbox> <button onClick={handleLogin}>登录</button> </div> ); }; ``` 2. 加密存储密码: ```js const encrypt = (password) => { // 使用 AES 算法加密密码 // ... return encryptedPassword; }; ``` 3. 检查 electron-store 中是否存在保存的用户名和密码,并自动填充: ```jsx import React, { useState, useEffect } from 'react'; const LoginForm = () => { const [username, setUsername] = useState(''); const [password, setPassword] = useState(''); useEffect(() => { const userInfo = store.get('userInfo'); if (userInfo) { setUsername(userInfo.username); const decryptedPassword = decrypt(userInfo.password); // 解密密码 setPassword(decryptedPassword); // 自动登录 // ... } }, []); const handleLogin = () => { // 登录逻辑 }; return ( <div> <input type="text" value={username} onChange={e => setUsername(e.target.value)} /> <input type="password" value={password} onChange={e => setPassword(e.target.value)} /> <button onClick={handleLogin}>登录</button> </div> ); }; ``` 需要注意的是,加密算法的选择和具体实现需要根据实际情况来确定。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

六卿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值