无感刷新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实现无感刷新也就结束了,记得留下宝贵的赞哦

相关文章
|
10天前
|
JavaScript 前端开发
Vue、ElementUI配合Node、multiparty模块实现图片上传并反显_小demo
如何使用Vue和Element UI配合Node.js及multiparty模块实现图片上传并反显的功能,包括前端的Element UI组件配置和后端的Node.js服务端代码实现。
14 1
Vue、ElementUI配合Node、multiparty模块实现图片上传并反显_小demo
|
10天前
|
存储 JSON 前端开发
node使用token来实现前端验证码和登录功能详细流程[供参考]=‘很值得‘
本文介绍了在Node.js中使用token实现前端验证码和登录功能的详细流程,包括生成验证码、账号密码验证以及token验证和过期处理。
20 0
node使用token来实现前端验证码和登录功能详细流程[供参考]=‘很值得‘
|
10天前
|
JavaScript 应用服务中间件 Linux
宝塔面板部署Vue项目、服务端Node___配置域名
本文介绍了如何使用宝塔面板在阿里云服务器上部署Vue项目和Node服务端项目,并配置域名。文章详细解释了安装宝塔面板、上传项目文件、使用pm2启动Node项目、Vue项目打包上传、以及通过Nginx配置域名和反向代理的步骤。
24 0
宝塔面板部署Vue项目、服务端Node___配置域名
|
10天前
|
JavaScript 前端开发
vue配合axios连接express搭建的node服务器接口_简单案例
文章介绍了如何使用Express框架搭建一个简单的Node服务器,并使用Vue结合Axios进行前端开发和接口调用,同时讨论了开发过程中遇到的跨域问题及其解决方案。
12 0
vue配合axios连接express搭建的node服务器接口_简单案例
|
18天前
|
JavaScript Linux 开发者
一个用于管理多个 Node.js 版本的安装和切换开源工具
【9月更文挑战第14天】nvm(Node Version Manager)是一个开源工具,用于便捷地管理多个 Node.js 版本。其特点包括:版本安装便捷,支持 LTS 和最新版本;版本切换简单,不影响开发流程;多平台支持,包括 Windows、macOS 和 Linux;社区活跃,持续更新。通过 nvm,开发者可以轻松安装、切换和管理不同项目的 Node.js 版本,提高开发效率。
|
21天前
|
缓存 资源调度
解决node升级到18版本node-sass安装问题
解决node升级到18版本node-sass安装问题
|
2月前
|
JavaScript 小程序 Java
【工具】用nvm管理nodejs版本切换,真香!
本文详细介绍了如何使用 nvm(node.js 版本管理工具)解决在不同项目间频繁切换 Node.js 版本的问题。通过实例展示了 A、B 两个项目分别依赖 v14.19.1 和 v16.15.0 版本时的解决方案,并提供了 nvm 的下载、安装及常用命令等实用信息,帮助读者轻松管理 Node.js 版本。文章还包括了卸载已安装的 Node.js、配置环境变量等步骤,确保切换顺畅无阻。
61 0
【工具】用nvm管理nodejs版本切换,真香!
|
2月前
|
缓存 JavaScript 前端开发
成功解决:npm 版本不支持node.js。【 npm v9.1.2 does not support Node.js v16.6.0.】
这篇文章介绍了如何解决npm版本与Node.js版本不兼容的问题,提供了查看当前npm和Node.js版本的步骤,以及如何根据Node.js版本选择合适的npm版本并进行升级的详细指导。
成功解决:npm 版本不支持node.js。【 npm v9.1.2 does not support Node.js v16.6.0.】
|
2月前
|
JavaScript
成功解决node、node-sass和sass-loader版本冲突问题、不需要降低node版本。如何在vue项目中安装node-sass,以及安装node-sass可能遇到的版本冲突问题
这篇文章介绍了在Vue项目中安装node-sass和sass-loader时遇到的版本冲突问题,并提供了解决这些问题的方法,包括在不降低node版本的情况下成功安装node-sass。
成功解决node、node-sass和sass-loader版本冲突问题、不需要降低node版本。如何在vue项目中安装node-sass,以及安装node-sass可能遇到的版本冲突问题
|
2月前
|
JavaScript API
Vue——node-ops.ts【十三】
Vue——node-ops.ts【十三】
17 2
下一篇
无影云桌面