手机端token为啥会失效
时间: 2024-01-18 18:02:10 浏览: 242
手机端的token失效可能有以下几种原因:
1. 登录状态过期:一些应用程序会设置token的过期时间,如果用户长时间不使用应用程序,那么token可能会失效。
2. 用户密码更改:如果用户更改了密码,那么之前的token就会失效,因为token是与用户密码相关的。
3. 服务器端问题:如果服务器端出现故障或升级,可能会导致token失效。
4. 安全问题:如果用户的账户被盗或者存在安全问题,那么服务器可能会立即让token失效。
5. 其他问题:有时候可能会出现其他未知的问题,导致token失效。
相关问题
微信小程序 登录 换取 token
微信小程序登录换取token的过程如下:
1. 用户在微信小程序中点击登录按钮或者使用手机号、微信号等方式进行登录。
2. 微信小程序将用户的登录信息发送到服务器端。
3. 服务器验证用户的登录信息是否有效,比如检查用户的用户名和密码是否正确。
4. 如果验证通过,服务器将生成一个唯一的token,并将该token与用户信息绑定。
5. 服务器将生成的token返回给微信小程序。
6. 微信小程序将该token保存在本地。
7. 当用户进行其他需要登录的操作时,微信小程序将携带token发送给服务器。
8. 服务器接收到请求后,验证token的有效性。
9. 如果token有效,服务器会根据token找到对应的用户信息,并完成相应的业务操作。
10. 如果token无效,则说明用户未登录或者登录已失效,服务器会拒绝该请求。
通过这个过程,微信小程序实现了用户登录的功能,并且可以通过token来标识用户身份,实现相关业务操作的授权和限制。同时,使用token可以更好地保护用户的隐私信息。
使用springboot+vue实现验证码登录验证的前后端代码
前端代码:
```vue
<template>
<div>
<el-form :model="form" label-width="100px" ref="form">
<el-form-item label="手机号码" prop="phone">
<el-input v-model="form.phone" placeholder="请输入手机号码"></el-input>
</el-form-item>
<el-form-item label="验证码" prop="captcha">
<el-input v-model="form.captcha" placeholder="请输入验证码" style="width: 200px"></el-input>
<el-button type="primary" @click="sendCaptcha" :disabled="isSending">{{ captchaText }}</el-button>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm">提交</el-button>
</el-form-item>
</el-form>
</div>
</template>
<script>
import { getCaptcha, login } from '@/api/user'
export default {
data() {
return {
form: {
phone: '',
captcha: ''
},
captchaText: '获取验证码',
isSending: false
}
},
methods: {
sendCaptcha() {
if (!this.form.phone) {
this.$message.error('请输入手机号码')
return
}
if (this.isSending) {
return
}
this.isSending = true
let count = 60
const interval = setInterval(() => {
count--
if (count <= 0) {
clearInterval(interval)
this.captchaText = '重新获取'
this.isSending = false
} else {
this.captchaText = `${count}s后重新获取`
}
}, 1000)
getCaptcha(this.form.phone).then(() => {
this.$message.success('验证码已发送')
}).catch(() => {
clearInterval(interval)
this.captchaText = '重新获取'
this.isSending = false
})
},
submitForm() {
this.$refs.form.validate(valid => {
if (valid) {
login(this.form.phone, this.form.captcha).then(() => {
this.$router.push('/')
}).catch(error => {
this.$message.error(error.message)
})
}
})
}
}
}
</script>
```
后端代码:
```java
@RestController
@RequestMapping("/api/user")
public class UserController {
@Autowired
private RedisUtil redisUtil;
@PostMapping("/captcha")
public ResponseEntity<Object> getCaptcha(@RequestParam String phone) {
// 生成4位随机验证码
String captcha = String.valueOf(new Random().nextInt(8999) + 1000);
// 将验证码保存到redis中,有效期5分钟
redisUtil.set(phone, captcha, 5 * 60);
// TODO 发送短信验证码
return ResponseEntity.ok().build();
}
@PostMapping("/login")
public ResponseEntity<Object> login(@RequestParam String phone, @RequestParam String captcha) {
// 从redis中获取验证码
String redisCaptcha = (String) redisUtil.get(phone);
if (StringUtils.isBlank(redisCaptcha)) {
throw new BusinessException("验证码已失效,请重新获取");
}
if (!StringUtils.equals(redisCaptcha, captcha)) {
throw new BusinessException("验证码错误");
}
// TODO 验证手机号码是否已注册
// TODO 如果未注册,则自动注册
// TODO 生成token返回给前端
return ResponseEntity.ok().build();
}
}
```
阅读全文