Bug 解决 | 无法正常登录或获取不到用户信息

news2024/11/14 15:08:13

目录

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 {

    @Bean
    public 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.coloradmin.cn/o/1965794.html

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

相关文章

【微信小程序】java后端生成小程序链接跳转小程序

文章介绍&#xff1a;通过后端提供链接二维码&#xff0c;微信扫二维码请求后端&#xff0c;后端生成需要跳转的小程序链接 需要请求2个微信接口 1.获取微信access_token(我用了是我自己的httpUtil工具&#xff0c;细节就不提了&#xff0c;这个获取微信access_token是微信大…

【数据结构算法经典题目刨析(c语言)】环形链表的约瑟夫问题

&#x1f493; 博客主页&#xff1a;C-SDN花园GGbond ⏩ 文章专栏&#xff1a;数据结构经典题目刨析(c语言) 一.前言&#xff1a; 前言——著名的Josephus问题 据说著名犹太 Josephus有过以下的故事&#xff1a;在罗⻢⼈占领乔塔帕特后&#xff0c;39个犹太⼈与Josephus及他…

C#初级——List 容器

容器 在C#中&#xff0c;容器通常指的是用于存储和组织数据的集合类。 本文介绍的容器是动态数组&#xff1a;List<T> 内部使用数组来存储元素&#xff0c;当添加元素超出当前数组容量时&#xff0c;会自动调整大小&#xff08;扩容&#xff09;。 list容器 List<&g…

【ARM】ArmDS中Coretex-M处理器GPIO时钟使能代码分析

1、 文档目标 了解ArmDS中Coretex-M处理器GPIO时钟使能代码&#xff0c;掌握GPIO时钟使能的流程及其依据。 2、 问题场景 在应用Coretex-M处理器进行项目开发时&#xff0c;GPIO的使用&#xff0c;是任何一个开发人员必须掌握的内容。 3、软硬件环境 1&#xff09;、软件版本…

vue项目Nginx部署启动

1.vue打包 &#xff08;1&#xff09;package.json增加打包命令 "scripts": {"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js --host 10.16.14.110","start": "npm run dev","un…

11部门公布第二批国家数字乡村试点地区名单

近日&#xff0c;中央网信办、农业农村部、国家发展改革委、工业和信息化部、民政部、生态环境部、商务部、文化和旅游部、中国人民银行、市场监管总局、国家数据局联合印发通知&#xff0c;公布第二批国家数字乡村试点地区名单&#xff08;附后&#xff09;&#xff0c;并对组…

深入分析 Android ContentProvider (十)

文章目录 深入分析 Android ContentProvider (十)ContentProvider 的高级使用及最佳实践&#xff08;续&#xff09;1. ContentProvider 与异步加载使用 CursorLoader 进行异步数据加载 2. 动态权限请求动态请求权限示例 3. ContentProvider 的缓存优化使用 LruCache 实现内存缓…

优化 GitHub 体验的浏览器插件「GitHub 热点速览」

上周&#xff0c;GitHub 有个“安全问题”——CFOR&#xff08;Cross Fork Object Reference&#xff09;冲上了热搜&#xff0c;该问题的表现是&#xff1a; 远程仓库的提交内容任何人可以访问&#xff0c;即使已被删除。只需要拿到 commit ID源/Fork 的项目地址&#xff0c;任…

猫头虎分享AI写真系统架构分析

摘要 AI写真系统 是目前最受欢迎的技术之一&#xff0c;本文将详细介绍该系统的架构和实现&#xff0c;包括 前端框架Uni-app、后端框架Saas、AI Agent后端框架dify和langchain&#xff0c;以及通义千问 GPT-4 MJ DALL-E 3的应用。无论是技术小白还是大佬&#xff0c;都能从…

docker安装人大金仓最新数据库

1.下载docker版本人大金仓数据库 1.1 点击人大金仓网址&#xff0c;下载镜像包 1.2 上传镜像包并导入镜像 在这里插入代码片 #上传后导入镜像2.启动人大金仓数据库容器 docker run -tid \ --privileged \ --name kingbase \ -v /opt/kingbase/data:/home/kingbase/userdata…

2024思维导图软件大赏:哪些工具让知识管理更轻松

如果你是上班族&#xff0c;有时候会议需要头脑风暴&#xff0c;收到的信息总是杂乱无章令人头疼。这时候使用幕布思维导图这样的工具就如同智慧的灯塔&#xff0c;他会帮我们指引准确的方向。 1.福昕思维导图 链接直达&#xff1a;https://www.pdf365.cn/naotu/ 这个思维导…

LLC数字控制TMS320F28034,2-根据原理图配置GPIO控制引脚

LLC数字控制TMS320F28034&#xff0c;2-根据原理图配置GPIO控制引脚 LLC数字控制TMS320F28034&#xff0c;2-根据原理图配置GPIO控制引脚1 TMS320F280341.1 GPIO概述1.2 GPIO寄存器说明1.3 GPIO寄存器使用注意事项 2 项目原理图介绍2.1 GPIO使用介绍2.2 功能引脚使用说明 3 软件…

5、注册字符类设备

字符设备 cdev结构体 Linux中使用cdev结构体描述一个字符设备。结构体定义在include/linux/cdev.h 文件中&#xff0c; struct cdev{struct kobject kobj;struct module *owner; //所属模块const struct file_operations *ops; //文件操作结构体struct list_head lis…

Spring Cloud 集成 Nacos、openfeign 错误解决

前言&#xff1a; 在集成 Nacos 和 openfeign 的时候&#xff0c;过程出现了一点小曲折&#xff0c;这里简单分享一下&#xff0c;希望可以帮助到有需要的朋友。 Spring boot 版本如下&#xff1a; <version>2.4.5</version>Spring Alibaba 版本如下&#xff1a…

【狂神】多线程(含内部类、Lambda)

整体参考 一、线程 1、多任务&#xff1a; 现实中太多这样同时做多件事情的例子了&#xff0c;看起来是多个任务都在做&#xff0c;其实本质上我们的大脑在同一时间依旧只做了一件事情。 2、多线程&#xff1a; 原来是一条路&#xff0c;慢慢因为车太多了&#xff0c;道路…

程序员面试 “八股文”在实际工作中是助力、阻力还是空谈?

“八股文”在实际工作中是助力、阻力还是空谈&#xff1f; 作为现在各类大中小企业面试程序员时的必问内容&#xff0c;“八股文”似乎是很重要的存在。但“八股文”是否能在实际工作中发挥它“敲门砖”应有的作用呢&#xff1f;有IT人士不禁发出疑问&#xff1a;程序员面试考…

[FBCTF2019]RCEService (PCRE回溯绕过和%a0换行绕过)

json格式输入ls出现index.php 这道题原本是给了源码的&#xff0c;BUUCTF没给 源码&#xff1a; <?phpputenv(PATH/home/rceservice/jail);if (isset($_REQUEST[cmd])) {$json $_REQUEST[cmd];if (!is_string($json)) {echo Hacking attempt detected<br/><br/…

WebLogic: CVE-2020-14882/14883【getshell】

记录第一次getshell公网设备 漏洞介绍 CVE-2020-14882&#xff1a;允许 未授权 的用户绕过管理控制台 &#xff08;Console&#xff09;的权限验证访问后台 CVE-2020-14883&#xff1a;允许后台任意用户通过HTTP协议 执行任意命令 使用这两个漏洞组成的利用链&#xff0c;可通过…

ECCV`24 | 比DragDiffusion快100倍!RegionDrag:快·准·好的图像编辑方法!港大牛津

文章链接&#xff1a;https://arxiv.org/pdf/2407.18247 github链接&#xff1a;https://github.com/LuJingyi-John/RegionDrag 亮点直击 引入了一种基于区域的图像编辑方法&#xff0c;以克服基于点拖拽方法的局限性&#xff0c;利用更丰富的输入上下文来更好地对齐编辑结果与…

排序算法:归并排序,golang实现

目录 前言 归并排序 代码示例 1. 算法包 2. 归并排序代码 3. 模拟程序 4. 运行程序 5. 从大到小排序 归并排序主要操作 1. 合并 2. 分割&#xff08;Divide&#xff09;与递归排序&#xff08;Conquer&#xff09; 总体思想 循环次数测试 假如 10 条数据进行排序…