vue token解析 前端解析token中携带的数据

1. 安装插件

	npm install jwt-decode --save

2. 引入jwtDecode

	import jwtDecode from 'jwt-decode'
	const code = jwtDecode(res.data.data.accessToken)
	console.log(code)// 就可以解析成功了

实际使用代码:

<template>
  <div id="logindiv">
    <el-row justify="center" align="middle" style="height: 90vh">
      <el-col :span="9">
        <el-card class="box-card">
          <template #header>
            <div class="card-header">
              <span>欢迎使用北猫商城管理系统</span>
            </div>
          </template>
          <el-form :model="ruleForm" label-width="120px" ref="ruleFormRef" :rules="rules">
            <el-form-item label="账号:" prop="userId">
              <el-input v-model="ruleForm.userId" placeholder="请输入您的邮箱" />
            </el-form-item>
            <el-form-item label="密码:" prop="pwd1">
              <el-input
                v-model="ruleForm.pwd1"
                type="password"
                placeholder="请输入您的密码"
              />
            </el-form-item>
            <el-form-item label="确认密码:" prop="pwd2">
              <el-input
                v-model="ruleForm.pwd2"
                type="password"
                placeholder="再次输入密码"
              />
            </el-form-item>
            <el-form-item>
              <el-button type="primary" @click="submitForm(ruleFormRef)">登录</el-button>
              <el-button @click="resetForm(ruleFormRef)">重填</el-button>
            </el-form-item>
           <!-- 超链接 -->
            <el-form-item>
              <el-link href="/#/register" type="danger"> 还没有账号?去注册</el-link>
            </el-form-item>
          </el-form>
        </el-card>
      </el-col>
    </el-row>
  </div>
</template>

<script lang="ts" setup>
// MD5加密
import { Md5 } from 'ts-md5';
// vue参数
import { ref, reactive, onMounted } from "vue";
// 消息提示
import { ElMessage } from "element-plus";
//pinia本地储存
import { storeToRefs } from "pinia";
import appStore from "@/store/appStore";
//token
import jwtDecode from "jwt-decode";
//axios封装
import http from "@/http/index";
// 路由
import { useRoute, useRouter } from "vue-router";
// 属性校验
import type { FormInstance, FormRules } from "element-plus";
const route = useRoute();
const router = useRouter();
let { user, token } = storeToRefs(appStore());
const ruleFormRef = ref<FormInstance>();
 
 const ruleForm = reactive({
  userId: "ohftiaq3691@163.com",
  pwd1: "123456",
  pwd2: "123456",
});

const validatePass2 = (rule: any, value: any, callback: any) => {
  if (value === "") {
    callback(new Error("请再次输入密码"));
  } else if (value !== ruleForm.pwd1) {
    callback(new Error("两次密码不匹配!"));
  } else {
    callback();
  }
};

const rules = reactive<FormRules>({
  userId: [
    { required: true, message: "请输入邮箱", trigger: "blur" },
    //{ min: 3, max: 5, message: '至少 3 to 5', trigger: 'blur' },
    {
      type: "email",
      message: "请输入正确的邮箱地址",
      trigger: ["blur", "change"],
    },
  ],
  pwd1: [
    { required: true, message: "请输入密码", trigger: "blur" },
    { min: 6, message: "至少 6", trigger: "blur" },
  ],

  pwd2: [{ validator: validatePass2, trigger: "blur" }],
});

const callApi = () => {
  http
    .post("/api/login", {
      userId: ruleForm.userId,
      pwd: Md5.hashStr("ruleForm.pwd1").toUpperCase(),
    })
  //添加token
  .then((res: any) => {
      const tokenObj: any = jwtDecode(res);
      user.value.id = tokenObj.id;
      user.value.userId = tokenObj.userId;
      token.value = res;
      router.push({ name: "home" });
    })
    .catch((err: any) => {});
};
const submitForm = async (formEl: FormInstance | undefined) => {
  if (!formEl) return;
  await formEl.validate((valid, fields) => {
    if (valid) {
      //验证成功,执行下面方法
      callApi();
    } else {
      // console.log('error submit!', fields)
    }
  });
};
const resetForm = (formEl: FormInstance | undefined) => {
  if (!formEl) return;
  formEl.resetFields();
};
</script>
<style scoped>
#logindiv {
  background: url("../assets/login.jpeg");
  width: 100%;
  height: 100%;
  position: fixed;
  background-size: 100% 100%;
}
.title {
  color: white;
}
</style>

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue前端,可以使用localStorage或者vuex来保存token。具体的实现思路如下: 1. 在用户登录成功后,后端会返回一个token前端。 2. 前端可以将这个token存储到localStorage,使用localStorage.setItem('token', token)来保存。 3. 另外,也可以将token存储到vuex,通过vuex的state来管理token的状态。 4. 在每次跳转路由或者发送请求时,可以从localStorage或者vuex获取token,并将其添加到请求头,以便后端进行验证。 5. 如果后端返回的状态码为401,表示token验证失败,前端可以清除localStoragetoken,并跳转到登录页面。 总结起来,前端可以使用localStorage或者vuex来保存token,并在需要的时候获取并使用token进行验证和请求。 #### 引用[.reference_title] - *1* *3* [Vue项目实现用户登录及token验证](https://blog.csdn.net/m0_37911706/article/details/125316373)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Vue项⽬ 登录时 对于token的处理](https://blog.csdn.net/m0_67841039/article/details/125024185)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

great-sun

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

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

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

打赏作者

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

抵扣说明:

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

余额充值