无感刷新token(vue3与nodejs版本)

简介: 无感刷新token(vue3与nodejs版本)

使用vue3与nodejs实现无感刷新技术

为什么要使用无感刷新

首先说一下为什么要写无感刷新token,分为以下几点。

1.增强用户体验:无感刷新允许应用程序在后台自动更新访问令牌,无需用户进行任何操作。这样可以确保用户的会话保持活动状态,不会被意外中断或需要重新登录,提供更好的用户体验。

2.提高安全性:访问令牌通常具有较短的有效期,以减少令牌泄露的风险。通过使用无感刷新,可以在访问令牌快要过期时自动获取新的令牌,减少了令牌过期导致的潜在的安全漏洞。

3.减少对用户交互的需求:传统的身份验证流程通常需要用户定期输入用户名和密码来获取新的访问令牌。而无感刷新使得应用程序能够定期获取新的令牌,而无需用户进行额外的操作。

4.简化开发和维护:通过使用无感刷新机制,开发人员可以更轻松地实现令牌的管理和更新逻辑。无感刷新可以集成到应用程序的身份验证流程中,减少了开发和维护的复杂性。

后端代码的处理

然后下面我要展示我在后端做了哪些处理

1.我使用是nodejs中的express框架来实现

1.我们要引入一些我们需要的库

const express = require('express');
const jwt = require('jsonwebtoken');
const app = express();
const accessTokenSecret = 'your-access-token-secret';
const refreshTokenSecret = 'your-refresh-token-secret';
const users = [
  { username: 'admin', password: 'password' },
  // 可在此处添加更多用户
];

然后我们写入一个登录接口,下述是代码

// 登录接口,验证用户名和密码,生成并返回访问令牌和刷新令牌
app.post('/login', (req, res) => {
  const { username, password } = req.body;
  const user = users.find(u => {
    return u.username === username && u.password === password;
  });
  if (user) {
    const accessToken = jwt.sign({ username: user.username }, accessTokenSecret, { expiresIn: '30s' });
    const refreshToken = jwt.sign({ username: user.username }, refreshTokenSecret);
    res.json({ accessToken, refreshToken });
  } else {
    res.status(401).json({ error: '用户名或密码错误' });
  }
});

下面是刷新指令接口的实现

// 使用 JSON 解析器中间件解析请求体
app.use(express.json());
// 刷新令牌接口
app.post('/token', (req, res) => {
  // 从请求体中获取刷新令牌
  const { refreshToken } = req.body;
  // 如果刷新令牌不存在,则返回 401 状态码
  if (!refreshToken) {
    return res.sendStatus(401);
  }
  // 验证刷新令牌,并获取用户信息
  jwt.verify(refreshToken, refreshTokenSecret, (err, user) => {
    // 如果刷新令牌验证失败,则返回 403 状态码
    if (err) {
      return res.sendStatus(403);
    }
    // 生成新的访问令牌,并将其返回给客户端
    const accessToken = jwt.sign({ username: user.username }, accessTokenSecret, { expiresIn: '30s' });
    res.json({ accessToken });
  });
});
// 启动服务器
app.listen(3000, () => {
  console.log('服务器正在运行,端口:3000');
});

这些就是大致的后端的代码

前端代码的处理

现在我们开始写入vue3前端代码

<template>
  <div>
    <h1>无感刷新 Token 示例</h1>
    <div v-if="accessToken">
      <p>访问令牌:{{ accessToken }}</p>
      <p>刷新令牌:{{ refreshToken }}</p>
    </div>
    <button v-if="!accessToken" @click="login">登录</button>
    <button v-if="accessToken" @click="refreshToken">刷新令牌</button>
  </div>
</template>
<script>
import { reactive } from 'vue';
import axios from 'axios';
export default {
  setup() {
    const state = reactive({
      accessToken: '',
      refreshToken: ''
    });
    const login = () => {
      axios.post('http://localhost:3000/login', { username: 'admin', password: 'password' })
        .then(response => {
          state.accessToken = response.data.accessToken;
          state.refreshToken = response.data.refreshToken;
        })
        .catch(error => {
          console.error(error);
        });
    };
    const refreshToken = () => {
      axios.post('http://localhost:3000/token', { refreshToken: state.refreshToken })
        .then(response => {
          state.accessToken = response.data.accessToken;
        })
        .catch(error => {
          console.error(error);
        });
    };
    return {
      ...state,
      login,
      refreshToken
    };
  }
};
</script>

我们使用了 Axios 库发送 HTTP 请求。在 login 方法中,我们向后端的登录接口发送用户名和密码,如果验证通过,则将返回的访问令牌和刷新令牌保存在组件的数据中。在 refreshToken 方法中,我们向后端的刷新令牌接口发送刷新令牌,并将返回的新访问令牌保存在组件的数据中。

vue2+nodejs实现无感刷新技术

到这里vue3+nodejs实现无感刷新也就结束了,记得留下宝贵的赞哦

相关文章
|
1月前
|
JavaScript 前端开发 开发者
VUE 开发——Node.js学习(一)
VUE 开发——Node.js学习(一)
61 3
|
18天前
|
JavaScript 前端开发 持续交付
构建现代Web应用:Vue.js与Node.js的完美结合
【10月更文挑战第22天】随着互联网技术的快速发展,Web应用已经成为了人们日常生活和工作的重要组成部分。前端技术和后端技术的不断创新,为Web应用的构建提供了更多可能。在本篇文章中,我们将探讨Vue.js和Node.js这两大热门技术如何完美结合,构建现代Web应用。
18 4
|
6天前
|
JavaScript Linux iOS开发
详解如何实现自由切换Node.js版本
不同的项目中需要使用不同版本的 Node.js,有时旧项目需要旧版本,而新项目则可能依赖最新的 Node.js 版本
|
2月前
|
JavaScript 前端开发
Vue、ElementUI配合Node、multiparty模块实现图片上传并反显_小demo
如何使用Vue和Element UI配合Node.js及multiparty模块实现图片上传并反显的功能,包括前端的Element UI组件配置和后端的Node.js服务端代码实现。
34 1
Vue、ElementUI配合Node、multiparty模块实现图片上传并反显_小demo
|
2月前
|
存储 JSON 前端开发
node使用token来实现前端验证码和登录功能详细流程[供参考]=‘很值得‘
本文介绍了在Node.js中使用token实现前端验证码和登录功能的详细流程,包括生成验证码、账号密码验证以及token验证和过期处理。
44 0
node使用token来实现前端验证码和登录功能详细流程[供参考]=‘很值得‘
|
2月前
|
JavaScript 应用服务中间件 Linux
宝塔面板部署Vue项目、服务端Node___配置域名
本文介绍了如何使用宝塔面板在阿里云服务器上部署Vue项目和Node服务端项目,并配置域名。文章详细解释了安装宝塔面板、上传项目文件、使用pm2启动Node项目、Vue项目打包上传、以及通过Nginx配置域名和反向代理的步骤。
468 0
宝塔面板部署Vue项目、服务端Node___配置域名
|
2月前
|
JavaScript 前端开发
vue配合axios连接express搭建的node服务器接口_简单案例
文章介绍了如何使用Express框架搭建一个简单的Node服务器,并使用Vue结合Axios进行前端开发和接口调用,同时讨论了开发过程中遇到的跨域问题及其解决方案。
54 0
vue配合axios连接express搭建的node服务器接口_简单案例
|
2月前
|
JavaScript Linux 开发者
一个用于管理多个 Node.js 版本的安装和切换开源工具
【9月更文挑战第14天】nvm(Node Version Manager)是一个开源工具,用于便捷地管理多个 Node.js 版本。其特点包括:版本安装便捷,支持 LTS 和最新版本;版本切换简单,不影响开发流程;多平台支持,包括 Windows、macOS 和 Linux;社区活跃,持续更新。通过 nvm,开发者可以轻松安装、切换和管理不同项目的 Node.js 版本,提高开发效率。
|
1月前
|
JavaScript 算法 内存技术
如何降低node.js版本(nvm下载安装与使用)
如何降低node.js版本(nvm下载安装与使用)
|
2月前
|
缓存 资源调度
解决node升级到18版本node-sass安装问题
解决node升级到18版本node-sass安装问题