关于withCredentials不生效的问题

起因

为了实现的登录,获取用户信息这一个功能,我是采用cookie获取用户的相关信息,没有采用JWT令牌校验用户。然而出现前端请求未携带cookie,导致后端无法识别,从而无法获取用户的相关信息。

解决过程

  1. 经过查询前端的网络请求,才发现在向后端发起current 接口请求,请求头未携带登录时的cookie值,根据cookie的作用,自然后端的httpServeltResp无法解析这个这个接口请求,尽管这个接口返回的状态时200。根据网上的提示,加这一行代码就可以了。
axios.defaults.withCredentials = true
  1. 然而出现了报错!!!前端提示出现了跨域,经过后来一番查询,得知在前后端分离的项目cookie是不能进行流通的,不仅前端加上面的一行代码,在后端全局跨域配置类文件也要加上。加上allowCredentials,其实跟前端的代码是一样的作用,都是对cookie能够在浏览器实现跨域发挥作用的。
@Configuration
public class CorsMapping implements WebMvcConfigurer {
    @Override
    /**
     * 重新跨域支持方法
     * CorsRegistry  开启跨域注册
     */
    public void addCorsMappings(CorsRegistry registry) {
        //addMapping 添加可跨域的请求地址
        registry.addMapping("/**")
                //设置跨域 域名权限 规定由某一个指定的域名+端口能访问跨域项目
                // 发起请求的源地址(也就是你的前端项目的地址)
                .allowedOrigins("http://127.0.0.1:5173")// 这是我的前端项目端口号,你的可能不一样,可能是需要改了一下的
//                .allowedOriginPatterns("*")
                //是否开启cookie跨域
                .allowCredentials(true)
                //规定能够跨域访问的方法类型
                .allowedMethods("GET","POST","DELETE","PUT","OPTIONS")
                //添加验证头信息  token
                .allowedHeaders("*")
                //预检请求存活时间 在此期间不再次发送预检请求
 	}
 }

PS: 在设置allowCredentials为true时,我们是不能将allowedOrigins设置成所有的域名都可以访问,就就是设置成“*”,如果你这么做了的话,后端会报错,并告诉你这两者基于安全,是不能同时这样设置的(别问,我也不清楚为什么[苦笑])。

  1. 恭喜,到这里我的问题还是没有得到解决(快奔溃了),尽管前端没有报错跨域的问题,可以current 接口请求还是没有携带cookie值,这让我百思不得其解,正当我要放弃的时候!我发现有网友这么说:
    在这里插入图片描述
    这才恍然大悟,原来是浏览器得到了升级,从而在“从中作梗”,然后我就在项目的全局配置文件,对cookie进行设置!
    在这里插入图片描述
    这是为什么,我借助大佬的提供的图片,才懂了,还是因为安全(苦笑)
    在这里插入图片描述
  2. 解决!current接口请求可以携带了cookie值
    在这里插入图片描述

尾声

  1. 为了解决这个问题,又重新学习了cookie作用和原理以及(该死)的跨域知识。
  2. 现在我算是对cors配置文件的每个参数设置都要自己的理解,以及起到的作用,我也算是清楚了。
  3. 不放弃,换个角度思考,换个角度提出问题,从而找到答案!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Brilliant.Louis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值