Laravel X-CSRF-Token 与 POSTMAN 不匹配

Laravel X-CSRF-Token mismatch with POSTMAN

我尝试与使用 Laravel 构建的 REST API 对话。但是由于令牌不匹配,与 POSTMAN 的调用被拒绝。我想我需要在 header 中包含 CSRF 令牌。但是我需要加密的吗?当我插入这个令牌时,我仍然收到令牌不匹配的错误。

我使用以下方法检索我的令牌:

$encrypter = app('Illuminate\Encryption\Encrypter');
$encrypted_token = $encrypter->encrypt(csrf_token());
return $encrypted_token;

但这应该在每次刷新时改变吗?

是的,每次刷新它都会改变。你应该把它放在视图中,当你 post 它需要作为“_token”的值发送时 POST var.

如果您只是使用标准 POST,只需将此添加到表格中:

<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">

如果您正在使用 AJAX,请确保获取 _token 的值并将其与请求一起传递。

REF:http://laravel.com/docs/5.1/routing#csrf-protection

如果您不使用表单 - 例如 API - 您可以按照此处的步骤ps https://gist.github.com/ethanstenis/3cc78c1d097680ac7ef0:

基本上,将以下内容添加到您的 blade 或树枝 header

<meta name="csrf-token" content="{{ csrf_token() }}">

安装 Postman 拦截器(如果尚未安装),然后将其打开

然后,在您的浏览器中登录网站(您需要获得授权),然后检查元素或查看源代码以检索令牌

在 Postman 中,根据需要设置 GET/POST 等,并在您的 header 中创建一个新对

X-CSRF-TOKEN        tokenvaluetobeinserted235kwgeiOIulgsk

有些人建议在测试 API 时关闭 CSRF 令牌,但你并没有真正测试它。

如果您确实发现仍然有错误,请使用 preview 检查响应,因为 Laravel 的错误消息往往相当明确。如果什么都没有返回,请检查您的 php_error.log(不管它叫什么)。


ps 2018 年 10 月 - 我现在是用户 Laravel Passport 用于处理 API 注册、登录和用户令牌 - 值得一看!

使用 Postman
向具有
的任何页面发出 GET 请求 <meta name="csrf-token" content="{{ csrf_token() }}">
从响应中复制值。

向您的 POST 请求添加 header 字段:

"X-CSRF-TOKEN: "copied_token_in_previous_get_response"

我在 Postman 环境中使用 baseURL 变量时遇到此错误。原来我在调用网站的 URL 时没有调用 /api。听起来很傻,但为了消除用户错误,请确保检查您的请求 URL 是否基于:

https://<your-site-url>/api

不是:

https://<your-site-url>

将 /api 添加到 url 应该可以解决大多数刚刚测试 API 的人的问题...例如。 https://www.yoursite.com/api/register

转到 app/Http/Middleware/VerifyCsrfToken.php 并添加此值

    protected $except = [
        '/api/*'
    ];