前端無感登錄刷新

前端實現無感登錄

在現代的前端開發中,用戶體驗是非常重要的一環。無感登錄(也叫自動登錄)就是其中一個提升用戶體驗的關鍵功能。它的目標是讓用戶在登錄后,即使關閉瀏覽器或長時間不操作,也能在下次訪問時自動登錄,而不需要重新輸入賬號和密碼。今天我們就來聊聊如何通過 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.pswp.cn/news/906308.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/906308.shtml
英文地址,請注明出處:http://en.pswp.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握手過程 計算機網絡 網絡模型 為了解決多種設備能夠通過網絡相互通信,解決網絡互聯兼容性問題。 網絡模型是計算機網絡中用于…