laravel ajax 解决报错419 csrf 问题

laravel ajax 解决报错419 csrf 问题

大家好,又见面了,我是全栈君。

CSRF是”cross site request forgery”的意思,简单来说就是防止恶意页面中一个简单的form提交,就向你保持了登陆状态了网站里请求做一些你不想做的事情……言尽于此,我们之间看Laravel里的CSRF相关的内容吧!

Laravel(5以后)有个默认的CSRF middleWare,所有POST,PUT请求都会经过这个middleWare,看有没有csrf的token存在并且匹配,不存在的话就会抛出错误页面。提一句,如果做微信接口的话,一定要在接口地址上把这个middleWare给去掉,因为微信大多数都是把数据POST过来的,而你不能奢望微信给你附上一个csrf_token。。。

在Laravel的表单中,埋入一个就可以在表单请求的时候发出正确的token,这样就不会有问题了,而在ajax请求的时候呢,方法多多~

1. 如果你是用ajax submit一个已经存在的form,那么就和平常一样,把csrf藏在表单里就好了,万事大吉。

2. 如果你不是提交表单,那么就要考虑将token值放在一个什么地方,比如还是一个input中,然后ajax提交的时候去读取这个input,附在提交值中。

3. 当然,token值也可以不放在提交的值中,而放在headers里,如果你的js脚本直接写在blade模板里,可以用

$.ajaxSetup({

    headers: { 'X-CSRF-TOKEN' : '{
  
  { csrf_token() }}' }

});

来把token值提交给服务器。

4. 当然很多时候js是在静态文件里的,那么可以把token值放在html的meta里,就像这样

<meta name="_token" content="{
  
  { csrf_token() }}"/>

这样就能用

$.ajaxSetup({

   headers: {

       'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')

   }

});

5. 然而以上的方法都不够帅!!!因为你总是要在页面的什么地方调用csrf_token()输出这个值,然后用js脚本获得这个值~

我看Laravel源码的时候发现,Laravel默认会把CSRF_TOKEN的值写在一个叫XCRF-TOKEN的cookie中,其实每次访问这个值都会发生变化,那我们只要用这个值就好了嘛,下面就是见证奇迹的时刻(好古老的梗):

$.ajaxSetup({

     headers: {

         'X-XSRF-TOKEN': $.cookie('XSRF-TOKEN')

     }

});

在某个全局地方调用这个就好了,你不需要再手动输出token了(当然你要用cookie插件)!注意这里的XSRF而不是CSRF了。

补充:

You have to add data in your ajax request. I hope so it will be work.

data: {
        "_token": "{
  
  { csrf_token() }}",
        "id": id
        }

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/111776.html原文链接:https://javaforall.net

(0)
上一篇 2022年2月15日 上午6:00
下一篇 2022年2月15日 上午7:00


相关推荐

  • centos7 源码编译安装php7,报错make: *** 没有指明目标并且找不到 makefile。 停止。「建议收藏」

    centos7 源码编译安装php7,报错make: *** 没有指明目标并且找不到 makefile。 停止。

    2022年2月20日
    58
  • Seedream 2.0 技术报告发布!数据处理、预训练、RLHF全流程公开

    Seedream 2.0 技术报告发布!数据处理、预训练、RLHF全流程公开

    2026年3月12日
    2
  • 卸载Docker方法

    卸载Docker方法卸载步骤在安装 Autoware 库的时候安装了 Docker 发现电脑硬盘容量被占用不少 现在想卸载一下 docker 查找了很多资料 最终使用以下方法完整卸载 1 在配置 autoware 的时候其实安装的 docker ce 所以需要执行 sudoapt getpurgedock ce 此时可以执行 dockerversio 查看 docker 是否被卸载 2 卸载安装依赖 sudo

    2026年3月26日
    2
  • 遗传算法解决TSP问题MATLAB实现(详细)

    遗传算法解决TSP问题MATLAB实现(详细)问题定义 巡回旅行商问题给定一组 n 个城市和俩俩之间的直达距离 寻找一条闭合的旅程 使得每个城市刚好经过一次且总的旅行距离最短 TSP 问题也称为货郎担问题 是一个古老的问题 最早可以追溯到 1759 年 Euler 提出的骑士旅行的问题 1948 年 由美国兰德公司推动 TSP 成为近代组合优化领域的典型难题 TSP 是一个具有广泛的应用背景和重要理论价值的组合优化问题 近年来 有很多解决该问题的较为有效

    2026年3月18日
    2
  • 汇编语言标志位介绍

    汇编语言标志位介绍一、运算结果标志位1、进位标志CF(CarryFlag)进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令等。2、奇偶标志PF(ParityFlag)奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如…

    2022年7月12日
    25
  • 简述ajax的实现原理_空气净化器的原理

    简述ajax的实现原理_空气净化器的原理在写这篇文章之前,曾经写过一篇关于AJAX技术的随笔,不过涉及到的方面很窄,对AJAX技术的背景、原理、优缺点等各个方面都很少涉及null。这次写这篇文章的背景是因为公司需要对内部程序员做一个培训。项目经理找到了我,并且征询我培训的主题,考虑到之前Javascript、CSS等WEB开发技术都已经讲解过了,所以决定针对AJAX这一块做一个比较系统的培训,所以这篇文章实际上是一个培训的材料。  

    2025年10月27日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号