请教各位,这段 JS 代码是什么意思?

laravel版本号5.3

今天通过 php artisan make:auth命令创建了一个最小的用户注册登陆源码,它的前端页面里有这样一句话

    window.Laravel = {!! json_encode([
        'csrfToken' => csrf_token(),
    ]) !!};

这句话是什么意思?从缓存中取token?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 3

好吧,已经找到答案了,其实就是csrf-token标记,一般教程都是教你写在meta里,就像这样:
''
也可以直接写在js页面里,就像提问的那样。

7年前 评论
<meta name="csrf-token" content="{{ csrf_token() }}">
7年前 评论
json_encode([
        'csrfToken' => csrf_token(),
]) 

上面这行代码是执行的 php 语句,意思是在服务器上获取当前的 token,然后转化为json

window.Laravel =

这个赋值是把上面的 json 传给当前页面 window 对象,使 window 对象有一个 Laravel 属性。

为什么要给 window 对象这个属性呢?
因为这样就可以在 js 函数执行的时候,很方便取到 当前的 token 值,最常用的场景就是在发送 Ajax 请求的时候,需要在请求的 header 携带token值,就像下面这样

window.axios.defaults.headers.common = {
    'X-CSRF-TOKEN': window.Laravel.csrfToken,
    'X-Requested-With': 'XMLHttpRequest'
};

如果不这样做,想要发送 Ajax 请求的时候,可能会需要下面这样

Vue.http.headers.common['X-CSRF-TOKEN'] = document.querySelector('#token').getAttribute('value')
7年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!