vue项目登录连续密码错误用户将被锁定半小时 刷新页面不重置时间 前端用代码实现
时间: 2023-09-06 09:10:41 浏览: 44
好的,下面是一个简单的前端实现示例,你需要根据自己的项目进行适当的调整。
首先,在登录页面中添加一个计时器,用来显示用户还需要等待多久才能再次尝试登录:
```html
<template>
<div>
<input type="text" v-model="username" placeholder="请输入用户名">
<input type="password" v-model="password" placeholder="请输入密码">
<button @click="login">登录</button>
<div v-if="lockTime > 0">登录失败次数过多,请{{lockTime}}秒后再试</div>
</div>
</template>
<script>
export default {
data() {
return {
username: '',
password: '',
lockTime: 0
}
},
methods: {
login() {
// 在此处发送登录请求,并根据后端返回的数据更新 lockTime 的值
if (this.lockTime > 0) {
return
}
// 登录成功后的处理逻辑
}
},
mounted() {
setInterval(() => {
if (this.lockTime > 0) {
this.lockTime--
}
}, 1000)
}
}
</script>
```
然后,在后端维护一个记录用户登录失败次数和锁定时间的表。在用户登录时,如果发现该用户已经在锁定时间内,直接返回登录失败的信息;如果用户密码错误,将该用户的登录失败次数加1,并更新锁定时间为当前时间+半小时。在前端,你需要向后端请求该用户的登录失败次数和锁定时间,并根据这些信息来更新 lockTime 的值。下面是一个简单的示例:
```javascript
export default {
data() {
return {
username: '',
password: '',
lockTime: 0
}
},
methods: {
async login() {
if (this.lockTime > 0) {
return
}
try {
const res = await axios.post('/api/login', {
username: this.username,
password: this.password
})
// 登录成功后的处理逻辑
} catch (err) {
if (err.response.status === 401) {
const { lockTime } = err.response.data
this.lockTime = lockTime
}
}
},
async getLockTime() {
try {
const res = await axios.get('/api/lock-time')
this.lockTime = res.data.lockTime
} catch (err) {
console.log(err)
}
}
},
created() {
this.getLockTime()
},
mounted() {
setInterval(() => {
if (this.lockTime > 0) {
this.lockTime--
}
}, 1000)
}
}
```
需要注意的是,这只是一个简单的示例,你需要根据自己的项目进行适当的调整。