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 的值并将其与请求一起传递。
如果您不使用表单 - 例如 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/*'
];
我尝试与使用 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 的值并将其与请求一起传递。
如果您不使用表单 - 例如 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/*'
];