update 验证密码强度,并修改密码,在debug模式下登录不需要正确密码

This commit is contained in:
2021-07-02 19:00:01 +08:00
parent fda3e8e8f2
commit 36a9964899
8 changed files with 274 additions and 50 deletions

View File

@@ -3,6 +3,10 @@ const urls = {
* 登录
*/
login: ['/login', 'post'],
/**
* 登录时修改密码
*/
loginPass: ['/loginPass', 'post'],
/**
* 登出
*/

View File

@@ -1,5 +1,5 @@
import React, { Component } from 'react'
import { Button, Form, Input, message as Message } from 'antd'
import { Alert, Button, Form, Input, message as Message, Modal } from 'antd'
import Container from 'components/container'
import { encryptByRSA } from 'util/rsa'
import { RSA_PUBLIC_KEY } from 'util/global'
@@ -14,6 +14,10 @@ export default class index extends Component {
focusPassword: false,
btnDisabled: true,
pattern: '',
descriptions: '',
visible: false,
}
backgroundImage = require(`assets/image/login-bg-0${Math.floor(Math.random() * 4)}.jpg`)
@@ -33,9 +37,19 @@ export default class index extends Component {
api.login({ account, password })
.then(({ success, data, message }) => {
if (success) {
token.value = data
Message.success('登录成功')
this.props.history.replace('/')
const { passed, pattern, descriptions, token } = data
// 简单密码需要更改
if (!passed) {
this.setState({
visible: true,
loading: false,
btnDisabled: true,
pattern,
descriptions,
})
} else {
this.onLoginSuccess(token)
}
} else {
this.setState({ loading: false })
Message.error(message)
@@ -49,8 +63,52 @@ export default class index extends Component {
})
}
onLoginPass = values => {
this.setState({ loading: true })
const account = this.form.current.getFieldValue('account')
let { password, newPassword } = values
password = encryptByRSA(password, RSA_PUBLIC_KEY)
newPassword = encryptByRSA(newPassword, RSA_PUBLIC_KEY)
const confirm = newPassword // 前端验证两次密码即可.不需要加密
api.loginPass({ account, password, newPassword, confirm })
.then(({ success, data, message }) => {
if (success) {
const { passed, pattern, descriptions, token } = data
// 简单密码需要更改
if (!passed) {
this.setState({
visible: true,
loading: false,
btnDisabled: true,
pattern,
descriptions,
})
} else {
this.onLoginSuccess(token)
}
} else {
this.setState({ loading: false })
Message.error(message)
}
})
.catch(({ message }) => {
if (typeof message === 'object' && message[0]) {
Message.error(message[0].messages[0])
}
this.setState({ loading: false })
})
}
onLoginSuccess(jwtToken) {
token.value = jwtToken
Message.success('登录成功')
this.props.history.replace('/')
}
render() {
const { loading, focusUser, focusPassword, btnDisabled } = this.state
const { loading, focusUser, focusPassword, btnDisabled, visible, pattern, descriptions } =
this.state
return (
<div className="yo-login">
@@ -121,6 +179,54 @@ export default class index extends Component {
</Form>
</Container>
</div>
<Modal visible={visible} closable={false} footer={false}>
<Alert type="error" message="密码过于简单,请修改密码!" />
<br />
<Form className="yo-form" onFinish={this.onLoginPass}>
<div className="yo-form-group">
<Form.Item
label="旧密码"
rules={[{ required: true, message: '请输入旧密码' }]}
name="password"
>
<Input.Password autoComplete="off" placeholder="请输入旧密码" />
</Form.Item>
<Form.Item
label="新密码"
rules={[
{ required: true, message: '请输入新密码' },
// { pattern, message: '密码格式错误' },
]}
name="newPassword"
tooltip={descriptions}
>
<Input.Password autoComplete="off" placeholder="请输入新密码" />
</Form.Item>
<Form.Item
label="确认新密码"
rules={[
{ required: true, message: '请确认新密码' },
({ getFieldValue }) => ({
validator(_, value) {
if (!value || getFieldValue('newPassword') === value) {
return Promise.resolve()
}
return Promise.reject(new Error('确认新密码不匹配'))
},
}),
]}
name="confirm"
>
<Input.Password autoComplete="off" placeholder="请确认新密码" />
</Form.Item>
</div>
<Form.Item noStyle>
<Button htmlType="submit" type="primary" block loading={loading}>
确认
</Button>
</Form.Item>
</Form>
</Modal>
</div>
)
}