token是什么
Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码
使用Token的目的(有什么用)
Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。
是由后端提供的 前端提交账号密码 传到后台验证 验证通过返回该密钥
下面是代码实现
1.封装网络接口 分布架构
import request from '@/utils/request.js'
// 登录模块
export const LoginApi = (data) => {
return request({
method: 'POST',
url: '/login',
data
})
}
2.布局element-ui from表单验证 具体可以参考参数参考官方文档
https://element.eleme.cn/#/zh-CN/component/form
布局效果
<template>
<div class="login">
<div class="box">
<!-- 表单验证 -->
<el-form :model="ruleForm" status-icon :rules="rules" ref="ruleForm">
<el-form-item prop="name">
<span>用户名<font-awesome-icon icon="fa-solid fa-user" class="ico-user" /></span>
<el-input type="text" v-model="ruleForm.name" class="user"></el-input>
</el-form-item>
<el-form-item prop="checkPass">
<span>密码<font-awesome-icon icon="fa-solid fa-lock" class="ico-passw" /></span>
<el-input type="password" v-model="ruleForm.checkPass" class="passw"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-position"
@click="submitForm('ruleForm')">提交</el-button>
</el-form-item>
</el-form>
</div>
</div>
</template>
3.第三步写逻辑来实现登录跳转路由
那个正则验证我这里是封装成js模块 主要是为了简化代码 还有本地存储也封装的js 最后在暴露出去 我在最后会把封装的代码放在下面
<script>
// 导入网络请求模块
import { LoginApi } from '@/api'
// 导入正则验证
import { validateName, validatePass } from '@/utils/ValidationRegularity.js'
// 导入本地存储
import { setToken } from '@/utils/token.js'
export default {
name: 'Login',
data() {
return {
ruleForm: {
name: '',
checkPass: ''
},
rules: {
// 这个使用的是已经封装过的正则验证
name: [{ required: true, validator: validateName, trigger: 'blur' }],
checkPass: [{ required: true, validator: validatePass, trigger: 'blur' }]
}
}
},
methods: {
submitForm(formName) {
this.$refs[formName].validate(async (valid) => {
// 表示通过了表单验证 进入判断
if (valid) {
try {
const {
data: { message, username, token, status }
} = await LoginApi({ username: this.ruleForm.name })
if (status === 200) {
// 本地存储 token username
setToken('token', token)
setToken('username', username)
this.$message({ message, type: '成功' })
// 跳转页面
this.$router.push('/Layout')
}
} catch (message) {
this.$message({ message, type: 'error' })
}
/* ----------- */
} else {
this.$message({ message: '输入有误', type: 'error' })
}
/* -------- */
})
}
}
}
</script>
4.封装的本地存储和正则验证 使用 分别暴露 是写在utils文件夹
// 自定义校验 在rules里面调用 用户
export const validateName = (rule, value, callback) => {
const reg = /^[\w-]{4,16}$/
if (value === '') {
callback(new Error('请输入用户名'))
} else if (!reg.test(value)) {
callback(new Error('输入大小写字母,数字,下划线4-16位组成'))
} else {
callback()
}
}
// 自定义校验 在rules里面调用 密码
export const validatePass = (rule, value, callback) => {
const reg1 = /^\S*(?=\S{6,})(?=\S*\d)(?=\S*[A-Z])(?=\S*[a-z])(?=\S*[!@#$%^&*? ])\S*$/
if (value === '') {
callback(new Error('输入密码'))
} else if (!reg1.test(value)) {
callback(new Error('必须包含大小写字母,数字,特殊符号_ 6位以上'))
} else {
callback()
}
}
5.本地存储模块
// 设置本地存储
export function setToken(key, value) {
localStorage.setItem(key, value)
}
// 获取本地存储
export function getToken(key) {
return localStorage.getItem(key)
}
// 删除本地存储
export function removToken(key) {
localStorage.removeItem(key)
}
// 清空本地存储
export function clearToken(key) {
localStorage.clear(key)
}
上面代码简单明了 记得点赞 都是干货