Bug 解決 無法正常登錄或獲取不到用戶信息

目錄

1、跨域問題

2、后端代碼問題

3、前端代碼問題


我相信登錄這個功能是很多人做項目時候遇到第一個檻!

**看起來好像很簡單的登錄功能,實際上還是有點坑的,比如明明賬號密碼都填寫正確了,**為什么登錄后請求接口又說我沒登錄?為什么我登錄成功跳轉了頁面卻拿不到用戶信息?

這篇文章,我列舉常見的幾種情況和解決方案,供大家參考。

1、跨域問題

報錯如上所示,所謂的跨域****指的是:比如前端的域名是 aaa.com,訪問后端服務域名 bbb.com,此時的行為就是跨域。

更專業一點的描述就是:在****不同域(域名、協議、端口號任何一個不同)之間進行通信時,就是跨域

注意哦,是域名、協議、端口號任何一個!協議包括 http 和 https 的區別!

實際上跨域是瀏覽器的限制,它是出于安全考慮阻止這種行為,這種安全策略稱為同源策略(Same-Origin Policy),沒錯它是好心的,但是確實因為它傷害了很多剛入門的同學心。

那跨域問題和登錄有什么關系呢?

實際上我們很多登錄場景都得用到 cookie,比如我們把 session 存在 cookie 里面或者把 token 存 cookie 里,這存的不就是我們的用戶憑證信息嗎?

而 cookie 是跟域名走的!根據同源策略,不同域名之間的 cookie 是不通的,這一舉措是為了確保網站的敏感數據不會被其他域名的網站惡意獲取。

所以不同域之間的 cookie 不互通,導致登錄的用戶憑證信息不互通,導致前端請求后端的時候無法帶上用戶憑證,或者后端回種用戶憑證的時候前端拿不到。

綜上使得大家登錄失效!無法獲取用戶信息!

那怎么解決這個問題呢?

1)保持域名一致

這個應該很好理解,既然瀏覽器限制不同域之間的信息不互通,那么我們在一個域下操作就好了。

可以讓前端和后端接口域名保持一致,用 Nginx 進行端口轉發

2)后端設置

后端有跨域的配置,指定允許跨域的域名,這樣瀏覽器就知道了這個源是被允許的,大家就可以友好的互通了!

比如我后端的域名是 bbb.com,此時我允許 aaa.com 來調用我,那么就可以這樣配置:

@Configuration
public class CorsConfig {@Beanpublic FilterRegistrationBean<CorsFilter> corsFilter() {UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();CorsConfiguration config = new CorsConfiguration();config.setAllowCredentials(true);// 填寫前端域名config.addAllowedOrigin("http://aaa.com");config.addAllowedHeader("*");config.addAllowedMethod("*");source.registerCorsConfiguration("/**", config);FilterRegistrationBean<CorsFilter> bean = new FilterRegistrationBean<>(new CorsFilter(source));bean.setOrder(Ordered.HIGHEST_PRECEDENCE);return bean;}
}

或者只是某個 Controller 上需要配置跨域:

import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RestController;@RestController
@CrossOrigin(origins = "http://aaa.com")
public class MyController {// 控制器方法
}

或者只是 Controller 上的某個方法需要配置:

import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class MyController {@GetMapping("/data")@CrossOrigin(origins = "http://aaa.com")public String getData() {// 處理方法return "Data";}
}

然后再補充一下常用的這個注解的相關屬性的含義:

origins:允許的來源域,可以是一個字符串數組。

methods:允許的 HTTP 方法,如 GET、POST 等。

allowedHeaders:允許的請求頭。

exposedHeaders:暴露給瀏覽器的響應頭。

allowCredentials:是否允許發送身份驗證信息(如 Cookie)。

maxAge:預檢請求的有效期。

如果項目里用了@CrossOrigin注解還是報錯,可以試試在后端的 @CrossOrigin 注解加 allowCredentials=“true”。

2、后端代碼問題

如果我們確認沒有跨域問題,那么就得看看是不是代碼層面的bug了。

首先我們得懷疑后端的邏輯,確保我們正常的返回了用戶憑證或者一些用戶信息。

比如通過 F12 確認后端登錄接口是否正常返回數據,通過控制臺或者服務器查看日志,看看登錄接口被調用時是否有報錯,有時候可能是因為報錯被 try catch 導致沒有異常信息等等

3、前端代碼問題

確定沒有跨域問題,且后端接口正常返回用戶信息后,此時我們需要把懷疑的目光轉向前端代碼邏輯!

1)正常登錄后發現獲取不到用戶的信息?

可能是前端的用戶數據取值和后端返回數據結構不匹配

2)點擊一個頁面,發現登錄態竟然失效了?

可能就是前端在請求時沒有帶上 cookie,需要在 requestConfig.ts 中添加上withCredentials: true

3)app.ts 里配置的是 localhost,用 127.0.0.1 來訪問就帶不上用戶信息?

因為這樣 cookie 就種不上,改成 127.0.0.1 即可。


**以上就是本次的學習分享,希望對大家有所幫助,****關注我!**不定期分享有用干貨!!!

如果有疑問的可以評論提出來~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/62789.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62789.shtml
英文地址,請注明出處:http://en.pswp.cn/web/62789.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

論文翻譯 | ChunkRAG: Novel LLM-Chunk Filtering Method for RAG Systems

摘要 使用大型語言模型&#xff08;LLM&#xff09;的檢索-增強生成&#xff08;RAG&#xff09;系統經常由于檢索不相關或松散相關的信息而生成不準確的響應。現有的在文檔級別操作的方法無法有效地過濾掉此類內容。我們提出了LLM驅動的塊過濾&#xff0c;ChunkRAG&#xff0…

Maven(生命周期、POM、模塊化、聚合、依賴管理)詳解

Maven構建項目的生命周期 在Maven出現之前&#xff0c;項目構建的生命周期就已經存在&#xff0c;軟件開發人員每天都在對項目進行清理&#xff0c;編譯&#xff0c;測試&#xff0c;部署等工作&#xff0c;這個過程就是項目構建的生命周期。雖然大家都在不停的做構建工作&…

jenkins harbor安裝

Harbor是一個企業級Docker鏡像倉庫?。 文章目錄 1. 什么是Docker私有倉庫2. Docker有哪些私有倉庫3. Harbor簡介4. Harbor安裝 1. 什么是Docker私有倉庫 Docker私有倉庫是用于存儲和管理Docker鏡像的私有存儲庫。Docker默認會有一個公共的倉庫Docker Hub&#xff0c;而與Dock…

【Python網絡爬蟲筆記】10- os庫存儲爬取數據

os庫的作用 操作系統交互&#xff1a;os庫提供了一種使用Python與操作系統進行交互的方式。使用os庫來創建用于存儲爬取數據的文件夾&#xff0c;或者獲取當前工作目錄的路徑&#xff0c;以便將爬取的數據存儲在合適的位置。環境變量操作&#xff1a;可以讀取和設置環境變量。在…

微信小程序從后端獲取的圖片,展示的時候上下沒有完全拼接,有縫隙【已解決】

文章目錄 1、index.wxml2、index.js3、detail.detail為什么 .rich-text-style 樣式可以生效&#xff1f;1. <rich-text> 組件的特殊性2. 類選擇器的作用范圍3. 樣式優先級4. line-height: 0 的作用5. 為什么直接使用 rich-text 選擇器無效&#xff1f; 總結 上下兩張圖片…

Linux-apache虛擬主機配置筆記

一、 安裝apache 有需要的話&#xff0c;可以去查看具體的apache的安裝apache安裝https://blog.csdn.net/m0_68472908/article/details/139348739?spm1001.2014.3001.5501 都可以使用本地yum源搭建本地yum源搭建https://blog.csdn.net/m0_68472908/article/details/14385692…

常用vim命令行-linux008

Vim 是一款功能強大的文本編輯器&#xff0c;廣泛應用于編程、配置文件編輯以及日常文本處理。Vim 在其命令行模式下提供了豐富的操作命令&#xff0c;這些命令能夠大幅提升編輯效率。以下是 Vim 中常用的命令及操作的總結&#xff0c;覆蓋了 Vim 中的基本操作、查找、替換、文…

xshell連接虛擬機,更換網絡模式:NAT->橋接模式

NAT模式&#xff1a;虛擬機通過宿主機的網絡訪問外網。優點在于不需要手動配置IP地址和子網掩碼&#xff0c;只要宿主機能夠訪問網絡&#xff0c;虛擬機也能夠訪問。對外部網絡而言&#xff0c;它看到的是宿主機的IP地址&#xff0c;而不是虛擬機的IP。但是&#xff0c;宿主機可…

【Spring Boot集成Shiro指南】

Spring Boot集成Shiro指南 一、添加Maven依賴 首先&#xff0c;需要在Spring Boot項目的pom.xml文件中添加Shiro相關的依賴。例如&#xff1a; <dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring</artifactId><ve…

SpringBoot使用Nacos進行application.yml配置管理

Nacos是阿里巴巴開源的一個微服務配置管理和服務發現的解決方案。它提供了動態服務發現、配置管理和 服務管理平臺。Nacos的核心功能包括服務發現、配置管理和動態服務管理&#xff0c;使得微服務架構下的服務治理 變得簡單高效。 Nacos的設計基于服務注冊與發現、配置管理、動…

Electron-Vite 項目搭建(Vue)

前提條件 Node.js: 確保已安裝 Node.js 版本 18 或更高版本 (推薦使用最新穩定版)。Vite: 確保 Vite 版本為 4.0 或以上。包管理工具: 推薦使用 pnpm&#xff0c;但也可以使用 npm 或 yarn。 安裝 Electron-Vite 首先&#xff0c;在項目中安裝 electron-vite 作為開發依賴&a…

STM32F103單片機HAL庫串口通信卡死問題解決方法

在上篇文章 STM32F103單片機使用STM32CubeMX創建IAR串口工程 中分享了使用cubeMX直接生成串口代碼的方法&#xff0c;在測試的過程中無意間發現&#xff0c;串口會出現卡死的問題。 當串口一次性發送十幾個數據的時候&#xff0c;串口感覺像卡死了一樣&#xff0c;不再接收數據…

【Neo4J】neo4j docker容器下的備份與恢復

文章目錄 一. 官網說明1. 操作說明2. 注意事項 二. docker 容器化操作1. 導出&#xff08;備份&#xff09;停止容器執行備份 2. 導入&#xff08;恢復&#xff09;停止容器(如果未停止)執行導入 3. 啟動容器 一. 官網說明 https://neo4j.com/docs/operations-manual/current/…

selenium自動爬蟲工具

一、介紹selenium爬蟲工具 selenium 是一個自動化測試工具&#xff0c;可以用來進行 web 自動化測試、爬蟲 selenium 本質是通過驅動瀏覽器&#xff0c;完全模擬瀏覽器的操作&#xff0c;比如跳轉、輸入、點擊、下拉等&#xff0c;來拿到網頁渲染之后的結果&#xff0c;可支持…

Unity開發數字孿生項目

前言&#xff1a;記錄下自己用Unity開發數字孿生項目&#xff0c;所用到的知識點、功能點以及對項目認知總結&#xff0c;當然還有開發過程中所遇到的坑。此篇博客也是會隨時進行更新。 &#x1f60a;屏幕前看到此片文章的開發者們在此類項目開發過程中少走些彎路&#xff0c;希…

node利用路由搭建web實例

npm init npm i express body-parser cookie-parser 封裝web實例 搭建路由 導出web 應用實例注冊

量化交易系統開發-實時行情自動化交易-8.25.真格(澎博財經旗下)平臺

19年創業做過一年的量化交易但沒有成功&#xff0c;作為交易系統的開發人員積累了一些經驗&#xff0c;最近想重新研究交易系統&#xff0c;一邊整理一邊寫出來一些思考供大家參考&#xff0c;也希望跟做量化的朋友有更多的交流和合作。 接下來會對于真格&#xff08;澎博財經…

QT JSON文件解析

參考博客 https://blog.csdn.net/cpp_learner/article/details/118421096 1 打開文件&#xff0c;讀取全部內容 QFile file("../Json/js.json"); if (!file.open(QFile::ReadOnly | QFile::Text)) {qDebug() << "cant open error!";return; }// 讀…

面試常見-Java 原生實現常見數據結構

Java 原生實現常見數據結構 文章目錄 Java 原生實現常見數據結構一、引言二、數組&#xff08;Array&#xff09;&#xff08;一&#xff09;概念&#xff08;二&#xff09;代碼實現 三、鏈表&#xff08;Linked List&#xff09;&#xff08;一&#xff09;概念&#xff08;二…

1. 機器學習基本知識(5)——練習題(參考答案)

20.&#x1f517;本章代碼筆記&#x1f4d3;鏈接&#xff08;需要&#x1fa9c;&#xff09;&#xff1a;&#xff08;01_the_machine_learning_landscape.ipynb - Colab (google.com)&#xff09; 如果你不想通過上面的官方網址下載本章的筆記&#xff0c;還可以在本篇博文的…