前端无感登录刷新

前端实现无感登录

在现代的前端开发中,用户体验是非常重要的一环。无感登录(也叫自动登录)就是其中一个提升用户体验的关键功能。它的目标是让用户在登录后,即使关闭浏览器或长时间不操作,也能在下次访问时自动登录,而不需要重新输入账号和密码。今天我们就来聊聊如何通过 userTokenrefreshToken 来实现无感登录。


什么是 userTokenrefreshToken

在实现无感登录之前,我们需要先了解两个重要的概念:userTokenrefreshToken

  1. userToken(用户令牌)
    它是一个短期有效的凭证,通常在用户登录成功后由后端生成并返回给前端。前端会把这个 userToken 保存起来(比如存到浏览器的 localStoragecookie 中),并在后续的请求中带上这个令牌,告诉后端“我是某某用户”。
    但是,userToken 的有效期一般比较短,比如 1 小时,过期后就不能再用了。
  2. refreshToken(刷新令牌)
    它是一个长期有效的凭证,通常有效期可以是几天甚至几周。refreshToken 的作用是用来“续命”——当 userToken 过期时,前端可以用 refreshToken 向后端请求一个新的 userToken,从而实现无感登录。

简单来说,userToken 是短期的通行证,refreshToken 是长期的备用钥匙。


无感登录的工作流程

为了让用户在登录后不需要频繁输入账号密码,我们可以通过以下流程来实现无感登录:

1. 用户登录

当用户输入账号和密码登录时,后端会返回两个令牌:userTokenrefreshToken。前端会把这两个令牌保存起来,比如:

  • userToken 存在浏览器的 localStoragecookie 中。
  • refreshToken 存在更安全的地方,比如 httpOnly cookie(这种 cookie 只能被后端访问,前端无法操作)。

2. 请求时验证 userToken

用户登录后,每次前端向后端发起请求时,都会带上 userToken。后端会验证这个令牌是否有效:

  • 如果 userToken 有效,后端会正常处理请求。
  • 如果 userToken 过期,前端会用 refreshToken 请求一个新的 userToken

3. 用 refreshToken 刷新 userToken

userToken 过期时,前端会自动发送一个请求给后端,带上 refreshToken,后端验证 refreshToken 是否有效:

  • 如果 refreshToken 有效,后端会返回一个新的 userToken,前端更新保存的 userToken
  • 如果 refreshToken 也过期了,用户需要重新登录。

4. 用户无感登录

通过上述流程,用户只需要在第一次登录时输入账号密码,之后的登录过程都是自动完成的,用户完全感受不到登录的存在。


实现无感登录的关键点

在实际开发中,我们需要注意以下几点:

1. 安全性

  • userTokenrefreshToken 都是敏感信息,不能随便暴露。尤其是 refreshToken,它的有效期更长,一旦泄露可能会导致严重的安全问题。
  • 建议将 refreshToken 存在 httpOnly cookie 中,这样前端无法直接访问,能有效防止 XSS 攻击。

2. 定时刷新

为了避免用户在操作时突然因为 userToken 过期而中断,可以在前端设置一个定时器,在 userToken 快过期时提前用 refreshToken 刷新。

3. 处理异常

  • 如果 refreshToken 过期了,前端需要引导用户重新登录。
  • 如果后端返回错误(比如令牌被篡改或失效),前端需要清除本地的令牌并跳转到登录页面。

示例代码

以下是一个简单的实现流程:

// 假设我们有一个 API 请求函数
async function apiRequest(url, options) {const userToken = localStorage.getItem('userToken');// 在请求头中带上 userTokenoptions.headers = {...options.headers,Authorization: `Bearer ${userToken}`,};const response = await fetch(url, options);// 如果 userToken 过期if (response.status === 401) {const refreshToken = getRefreshTokenFromCookie(); // 从 cookie 中获取 refreshTokenconst newToken = await refreshUserToken(refreshToken); // 用 refreshToken 刷新 userTokenif (newToken) {localStorage.setItem('userToken', newToken); // 更新 userTokenoptions.headers.Authorization = `Bearer ${newToken}`;return fetch(url, options); // 重新发起请求} else {// 如果 refreshToken 也过期了,跳转到登录页面redirectToLogin();}}return response;
}// 刷新 userToken 的函数
async function refreshUserToken(refreshToken) {const response = await fetch('/api/refresh-token', {method: 'POST',headers: {'Content-Type': 'application/json',},body: JSON.stringify({ refreshToken }),});if (response.ok) {const data = await response.json();return data.userToken; // 返回新的 userToken}return null; // 刷新失败
}

总结

无感登录的核心是通过 userTokenrefreshToken 的配合,让用户在登录后可以持续访问而不需要频繁输入账号密码。它不仅提升了用户体验,还能保证一定的安全性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/906308.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVASE查漏补缺

这段时间学习了很多知识,好多还有疑问不清楚的地方。今天有空总结一下。 javame,javase,javaee 一、Java ME(Micro Edition,微型版) Java ME是一种适用于移动设备和嵌入式系统的小型Java平台,具有高度可移植性和跨平…

【设计模式】基于 Java 语言实现工厂模式

目录 一、简单工厂模式 1.1 简单工厂模式的介绍 二、工厂方法模式 2.1 工厂方法模式的介绍 2.2 工厂方法模式的基本实现 2.3 工厂方法模式的应用场景 三、抽象工厂 3.1 抽象工厂的概念 3.2 抽象工厂的基本结构 3.3 抽象工厂的基本实现 3.4 抽象工厂的应用场景 四、…

OpenCV CUDA模块中的矩阵算术运算------创建卷积操作对象的工厂方法 cv::cuda::createConvolution

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 createConvolution函数是OpenCV CUDA 模块中用于创建卷积操作对象的工厂方法。它返回一个指向 cv::cuda::Convolution 接口的智能指针&#xff0…

IDEA:程序编译报错:java: Compilation failed: internal java compiler error

目录 简介异常信息排查原因解决 简介 代码无法编译、无法打包 异常信息 java: Compilation failed: internal java compiler error排查 1、代码近期没有改动过,原先是可以正常编译的 2、查看程序JDK,是JDK1.8没错,与原先JDK一致 3、出现…

windows 10 做服务器 其他电脑无法访问,怎么回事?

一般我们会先打开win10自己的防火墙策略,但是容易忽略 电脑之间 路由器上的防火墙,此时也需要查看一下,可以尝试先关闭路由器防火墙,如果可以了,再 设置路由器上的防火墙规则。 将路由器的上网设置 改成 路由模式 &a…

【人工智能-agent】--Dify+Mysql+Echarts搭建了一个能“听懂”人话的数据可视化助手!

Echarts官网:https://echarts.apache.org/zh/index.html ECharts 是一个由百度团队开发的、基于 JavaScript 的开源可视化图表库,它提供了丰富的图表类型和强大的交互功能,能够帮助开发者轻松创建专业级的数据可视化应用。 核心特点 丰富的图…

Android设备 显示充电速度流程

整体逻辑:设备充电速度的判断 系统通过读取充电器的最大电流(Current)与最大电压(Voltage),计算最大充电功率(Wattage),以此判断当前是慢充、普通充还是快充&#xff1a…

十一、Hive JOIN 连接查询

作者:IvanCodes 日期:2025年5月16日 专栏:Hive教程 在数据分析的江湖中,数据往往分散在不同的“门派”(表)之中。要洞察数据间的深层联系,就需要JOIN这把利器,将相关联的数据串联起来…

Excel在每行下面插入数量不等的空行

1、在B列输入要添加的空行数量(如果加7行,则写6,也可以插入数量不等的空行) 2、在C1单元格输入1 3、在C2输入公式:SUM($B$1:B1)1,下拉填充 4、在C9单元格输入1 5、选中C9单元格-->选择菜单栏“开始”…

iOS热更新技术要点与风险分析

iOS的热更新技术允许开发者在无需重新提交App Store审核的情况下,动态修复Bug或更新功能,但需注意苹果的审核政策限制。以下是iOS热更新的主要技术方案及要点: 一、主流热更新技术方案 JavaScript动态化框架 React Native & Weex 通过Jav…

服务器多用户共享Conda环境操作指南——Ubuntu24.02

1. 使用阿里云镜像下载 Anaconda 最新版本 wget https://mirrors.aliyun.com/anaconda/archive/Anaconda3-2024.02-1-Linux-x86_64.sh bug解决方案 若出现:使用wget在清华镜像站下载Anaconda报错ERROR 403: Forbidden. 解决方案:wget --user-agent“M…

基于YOLO算法的目标检测系统实现指南

YOLO(You Only Look Once)作为计算机视觉领域最具影响力的实时目标检测算法之一,其最新版本YOLOv8在速度与精度之间达到了新的平衡。本文将从技术实现角度,详细介绍如何使用YOLO算法构建高效的目标检测系统。 一、算法原理与技术架构 1.1 YOLO核心思想…

C++ asio网络编程(6)利用C11模拟伪闭包实现连接的安全回收

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、智能指针管理Session二、用智能指针来实现Server的函数1.start_accept()1.引用计数注意点2.std::bind 与异步回调函数的执行顺序分析 2.handle_accept1.异步…

AI与产品架构设计(2):Agent系统的应用架构与落地实

什么是AI Agent?其在架构中的独特定位 AI Agent(人工智能代理)是一种模拟人类智能行为的自主系统,通常以大型语言模型(LLM)作为核心引擎。简单来说,Agent能够像人一样感知环境信息、规划行动方…

Rust 数据结构:String

Rust 数据结构:String Rust 数据结构:String什么是字符串?创建新字符串更新字符串将 push_str 和 push 附加到 String 对象后使用 运算符和 format! 宏 索引到字符串字符串在内存中的表示字节、标量值和字形簇 分割字符串遍历字符串的方法 R…

Java卡与SSE技术融合实现企业级安全实时通讯

简介 在数字化转型浪潮中,安全与实时数据传输已成为金融、物联网等高安全性领域的核心需求。本文将深入剖析东信和平的Java卡权限分级控制技术与浪潮云基于SSE的大模型数据推送技术,探索如何将这两项创新技术进行融合,构建企业级安全实时通讯系统。通过从零到一的开发步骤,…

继MCP、A2A之上的“AG-UI”协议横空出世,人机交互迈入新纪元

第一章:AI交互的进化与挑战 1.1 从命令行到智能交互 人工智能的发展历程中,人机交互的方式经历了多次变革。早期的AI系统依赖命令行输入,用户需通过特定指令与机器沟通。随着自然语言处理技术的进步,语音助手和聊天机器人逐渐普…

MySQL刷题相关简单语法集合

去重 distinct 关键字 eg. :select distinct university from user_profile 返回行数限制: limit关键字 eg. :select device_id from user_profile limit 2 返回列重命名:as 关键字 eg.:select device_id as user_in…

Kubernetes MCP服务器(K8s MCP):如何使用?

#作者:曹付江 文章目录 1、什么是 Kubernetes MCP 服务器?1.1、K8s MCP 服务器 2、开始前的准备工作2.1. Kubernetes集群2.2. 安装并运行 kubectl2.3. Node.js 和 Bun2.4. (可选)Helm v3 3、如何设置 K8s MCP 服务器3.1. 克隆存储…

计算机网络-HTTP与HTTPS

文章目录 计算机网络网络模型网络OSITCP/IP 应用层常用协议HTTP报文HTTP状态码HTTP请求类型HTTP握手过程HTTP连接HTTP断点续传HTTPSHTTPS握手过程 计算机网络 网络模型 为了解决多种设备能够通过网络相互通信,解决网络互联兼容性问题。 网络模型是计算机网络中用于…