laravel 在做api接口的时候如何验证 X-CSRF-TOKEN

发布于 2022-09-11 18:34:58 字数 979 浏览 38 评论 0

laravel 在开发外部 服务请求的api 接口 ;

在laravel 的ajax 请求中 需要验证 X-CSRF-TOKEN

$.ajax({
                    type: 'POST',
                    url: _crtA,
                    data: { card : $("input[name='card']").val()},
                    dataType: 'json',
                    headers: {
                        'X-CSRF-TOKEN': _Token
                    },
                    success: function(data){                                            
                            layer.open({
                                content: data.msg,
                                time: 2

                    },
                    error: function(xhr, type){
                        layer.closeAll();
                        alert('500 error!')
                    }
                });

而 这个 X-CSRF-TOKEN 是laravel 自己生成的;

而外部网站 或者 app 在请求的时候 是没有 laravel 生成的 _token

对应这样的 请求接口,laravel改如何做开发呢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

晌融 2022-09-18 18:35:00

同意楼上的说法. api接口你为什么要做跨站验证?
所谓 csrf就是跨站请求, api就是给跨站请求,你还要禁止.是不是矛盾?

剑心龙吟 2022-09-18 18:35:00

在中间件文件夹下的VerifyCsrfToken填写哪些地址不验证csrf就可以了

class VerifyCsrfToken extends BaseVerifier

{
    /**
     * 指定从 CSRF 验证中排除的URL
     *
     * @var array
     */
    protected $except = [
        'testCsrf'
    ];
}
感性 2022-09-18 18:35:00

有时候你可能希望设置一组并不需要 CSRF 保护的 URI。例如,如果你正在使用 Stripe 处理付款并使用了他们的 webhook 系统,你会需要将 Stripe webhook 处理的路由排除在 CSRF 保护外,因为 Stripe 并不知道发送给你路由的 CSRF 令牌是什么。

一般地,你可以把这类路由放到 web 中间件外,因为 RouteServiceProvider 适用于 routes/web.php 中的所有路由。不过如果一定要这么做,你也可以将这类 URI 添加到 VerifyCsrfToken 中间件中的 $except 属性来排除对这类路由的 CSRF 保护:

<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;

class VerifyCsrfToken extends BaseVerifier
{
    /**
     * 这些 URI 会被免除 CSRF 验证
     *
     * @var array
     */
    protected $except = [
        'stripe/*',
    ];
}

CSRF 白名单

风吹过旳痕迹 2022-09-18 18:35:00

你们都没有理解提问者的意思吧, 提问者的意思是app 或者前后端分离的架构,在向后端发请求时如何 携带 laravel 后端生成的token

苦行僧 2022-09-18 18:34:59

既然是给外站的接口本身就是跨站的了,怎么可能验证CSRF(Cross-site request forgery),从字面就能理解吧。disable的方法,把CSRF设为route-specific middleware,或者别的,好久没用laravel了,看看文档应该有办法。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文