无感刷新token(vue2+nodejs版本)

简介: 无感刷新token(vue2+nodejs版本)

使用vue2与nodejs实现无感刷新token。

上篇我们使用了vue3实现了无感刷新,这篇文章则是围绕vue2来实现。

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');
});

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

前端代码的处理

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

<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 axios from 'axios';
export default {
  data() {
    return {
      accessToken: '',
      refreshToken: ''
    };
  },
  methods: {
    login() {
      axios.post('http://localhost:3000/login', { username: 'admin', password: 'password' })
        .then(response => {
          this.accessToken = response.data.accessToken;
          this.refreshToken = response.data.refreshToken;
        })
        .catch(error => {
          console.error(error);
        });
    },
    refreshToken() {
      axios.post('http://localhost:3000/token', { refreshToken: this.refreshToken })
        .then(response => {
          this.accessToken = response.data.accessToken;
        })
        .catch(error => {
          console.error(error);
        });
    }
  }
};
</script>

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

相关文章
|
3月前
|
前端开发
前端毕业设计|基于Vue+Nodejs实现游戏资讯平台(二)
前端毕业设计|基于Vue+Nodejs实现游戏资讯平台
|
1月前
|
JavaScript 内存技术
node与npm版本对应关系以及使用nvm管理node版本
node与npm版本对应关系以及使用nvm管理node版本
186 0
|
19天前
报错/ ./node_modules/axios/lib/platform/index.js Module parse failed: Unexpected token (5:2)怎么解决?
报错/ ./node_modules/axios/lib/platform/index.js Module parse failed: Unexpected token (5:2)怎么解决?
|
30天前
|
JavaScript 内存技术
不同版本NodeJS切换使用
不同版本NodeJS切换使用
13 0
|
1月前
|
内存技术
node版本与npm版本不对应的解决方案
node版本与npm版本不对应的解决方案
25 0
|
2月前
|
JavaScript 前端开发 算法
【Node.js 版本过高】运行前端时,遇到错误 `Error: error:0308010C:digital envelope routines::unsupported`
【Node.js 版本过高】运行前端时,遇到错误 `Error: error:0308010C:digital envelope routines::unsupported`
66 0
|
2月前
|
JavaScript
查看NodeJs版本和查看NPM版本
查看NodeJs版本和查看NPM版本
49 0
查看NodeJs版本和查看NPM版本
|
2月前
|
Web App开发 JavaScript 前端开发
构建现代Web应用:Vue.js与Node.js的完美结合
在当今快速发展的Web技术领域,选择合适的技术栈对于开发高效、响应迅速的现代Web应用至关重要。本文深入探讨了Vue.js和Node.js结合使用的优势,以及如何利用这两种技术构建一个完整的前后端分离的Web应用。不同于传统的摘要,我们将通过一个实际的项目示例,展示从搭建项目架构到实现具体功能的整个过程,着重介绍了Vue.js在构建用户友好的界面方面的能力,以及Node.js在处理服务器端逻辑和数据库交互中的高效性。通过本文,读者不仅能够理解Vue.js与Node.js各自的特点,还能学习到如何将这两种技术融合应用,以提升Web应用的开发效率和用户体验。
|
2月前
nodejs17/18版本报错:digital envelope routines::unsupported
nodejs17/18版本报错:digital envelope routines::unsupported
45 0
|
2月前
|
缓存 JavaScript
mac升级node到指定版本
mac升级node到指定版本