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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Pytest(6)重复运行用例pytest-repeat[通俗易懂]

    Pytest(6)重复运行用例pytest-repeat[通俗易懂]前言平常在做功能测试的时候,经常会遇到某个模块不稳定,偶然会出现一些bug,对于这种问题我们会针对此用例反复执行多次,最终复现出问题来。自动化运行用例时候,也会出现偶然的bug,可以针对单个用例,

    2022年7月28日
    3
  • 御用导航提示提醒_又现神操作!广西两车主开车走楼梯,车主:导航让我走的!…[通俗易懂]

    御用导航提示提醒_又现神操作!广西两车主开车走楼梯,车主:导航让我走的!…[通俗易懂]大家有没有被导航坑坏的经历?近日柳州市某小区内有两辆小轿车跟着导航走结果都开到了同一楼梯处卡在了同样的地方……2月12日上午,在柳州市柳江区柳西新城小区,一司机开车跟着导航走,结果将车子开到楼梯上了。据网友描述,事故发生在该小区31栋平台上,一辆红色小轿车的四个车轮都在楼梯上,走下楼梯直达小区门口。随后,司机用其他车子把他的汽车拉起来,自己也没有受伤。无独有偶此前就发生过一样的事…

    2022年5月7日
    168
  • 新手入侵笔记_探灵笔记适合新手的角色

    新手入侵笔记_探灵笔记适合新手的角色【拿shell】 1.直接上传aspasajspcerphpaspxhtrcdx格式的木马,不行就利用IIS6.0解析漏洞”:1.asp;1.jpg/1.asp;.jpg/1.asp;jpg/1.asp;.xls 2.上传图片木马遇到拦截系统,连图片木马都上传不了,记事本打开图片木马在代码最前面加上gif89a,一般就能逃过拦截系统了。 3.上传图片木马把地址复制到…

    2022年9月21日
    0
  • 分布式存储系统sheepdog

    分布式存储系统sheepdog

    2021年12月10日
    166
  • 激光SLAM流程_激光打眼

    激光SLAM流程_激光打眼基于环境自然导航激光叉车:基于环境自然导航的激光导航叉车AGV中,机器人在运动过程中通过编码器结合IMU计算得到里程计信息,运用机器人的运动模型得到机器人的位姿初估计,然后通过机器人装载的激光传感器获取的激光数据结合观测模型(激光的扫描匹配)对机器人位姿进行精确修正,得到机器人的精确定位,最后在精确定位的基础上,将激光数据添加到栅格地图中,反复如此,机器人在环境中运动,最终完成整个场景地图的构建…

    2022年8月23日
    5
  • Hadoop 中xsync集群分发脚本

    Hadoop 中xsync集群分发脚本大数据集群中使用xsync脚本分发文件到集群中的所有机器

    2022年5月24日
    39

发表回复

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

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