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


相关推荐

  • oracle建表语句以及约束

    oracle建表语句以及约束创建表基本语法 约束实体完整性主键约束唯一性约束域完整性 check 约束引用完整性 ForeignKEY 约束非空 NOTNULL 约束 顾名思义 所约束的列不能为 NULL 值 否则就会报错创建列级约束创建表级约束主键 唯一性约束 Check 约束 ForeignKEY 例

    2025年11月3日
    3
  • vim插件管理工具pathogen[通俗易懂]

    vim插件管理工具pathogen[通俗易懂]因为vim编辑的时候,实在记不住复杂的目录结构,为了更方便展示,所以想到安装树形目录插件,自然是用到最多的NERDTree。说到安装vim插件首先需要安装vim插件管理工具啊。简单说一下vim插件管理工具pathogen,官网http://www.vim.org/scripts/script.php?script_id=2332。

    2025年7月25日
    3
  • win7安装vs2015失败_win10还是win7

    win7安装vs2015失败_win10还是win7错误日志:解决方法:1、把vs2008镜像文件下的\WCU\WebDesignerCore\WebDesignerCore.EXE手动解压到一个地方(注意解压出来的文件夹里面有个Office.zh-cn)2、找一个Office2007光盘或光盘镜像,找到Office.zh-cn文件夹,把该文件夹复制,然后覆盖到上一步解压中的Office.zh-cn中3、在第一步解压出来的文

    2025年8月30日
    5
  • linux安装python虚拟环境_windows安装python虚拟环境

    linux安装python虚拟环境_windows安装python虚拟环境准备1、使用wget命令下载安装包,耐心等待下载。安装步骤1、安装gcc2、安装readline3、把tgz文件进行解压4、切换到python目录5、解决PIP包管理器所需依赖包。6、安装文件7、开始编译安装,自定义安装目录。8、修改系统内置Python软链接。9、针对Centos系统的一些问题Centos的包资源管理器是yum,由于该管理器是由Python语言实现的,故依赖于系统安装Python…

    2022年8月28日
    6
  • Python值传递还是引用传递

    Python值传递还是引用传递Python 值传递还是引用传递 Python 作为一门动态语言 变量本身的类型是不固定的 因此更加灵活 那 Python 到底是值传递还是引用传递呢 问题引出本人在本周写代码时 遇到这么一个让我吃惊的问题 问题可以抽象如下 deffunc val1 val2 val1val2 append 1 a 一系列对 a 的操作 b afunc a

    2025年6月11日
    2
  • 文件传输加密原理

    文件传输加密原理

    2022年3月12日
    54

发表回复

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

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