ses*_*360 13 api csrf laravel postman
我尝试与使用Laravel构建的REST API交谈.但由于令牌不匹配,POSTMAN的调用被拒绝.我想我需要在标题中包含CSRF令牌.但我需要加密吗?当我插入此令牌时,我仍然会收到令牌不匹配的错误.
我使用以下方法检索我的令牌:
$encrypter = app('Illuminate\Encryption\Encrypter');
$encrypted_token = $encrypter->encrypt(csrf_token());
return $encrypted_token;
Run Code Online (Sandbox Code Playgroud)
但这应该在每次刷新时改变吗?
DEV*_*nça 19
转到app/Http/Middleware/VerifyCsrfToken.php并添加此值
protected $except = [
'/api/*'
];
Run Code Online (Sandbox Code Playgroud)
bri*_*itt 13
如果您不使用表单 - 例如API - 您可以按照此处的步骤操作https://gist.github.com/ethanstenis/3cc78c1d097680ac7ef0:
基本上,将以下内容添加到刀片或树枝标题中
<meta name="csrf-token" content="{{ csrf_token() }}">
Run Code Online (Sandbox Code Playgroud)
安装Postman拦截器(如果尚未安装),并将其打开
然后,在您的浏览器中登录该站点(您需要获得授权),并检查元素或查看源以检索令牌
在Postman中,根据需要设置GET/POST等,并在标题中创建一个新对
X-CSRF-TOKEN tokenvaluetobeinserted235kwgeiOIulgsk
Run Code Online (Sandbox Code Playgroud)
有些人建议在测试API时关闭CSRF令牌,但是你真的没有测试它.
如果您确实发现仍然有错误,请使用previewLaravel 检查响应,因为Laravel往往会明确显示错误消息.如果什么都没有回来,检查你的php_error.log(它叫什么).
ps 2018年10月 - 我现在使用Laravel Passport处理API注册,登录和用户令牌 - 值得一看!
我在使用时遇到了这个错误baseURL我在 Postman 环境中结果我调用的网站网址没有/api结尾。听起来很愚蠢,但为了消除用户错误,请确保检查您的请求 URL 是否基于:
\xe2\x9c\x85https://<your-site-url>/api
不是:
\n\n\xe2\x9d\x8chttps://<your-site-url>
是的,每次刷新都会改变。您应该将其放入视图中,并且在发布时需要将其作为“_token”POST var 的值发送。
如果您只是使用标准 POST,只需将其添加到表单中:
<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
Run Code Online (Sandbox Code Playgroud)
如果您使用 AJAX,请确保获取 _token 的值并将其与请求一起传递。
参考: http: //laravel.com/docs/5.1/routing#csrf-protection
小智 5
使用 Postman
向任何具有
<meta name="csrf-token" content="{{ csrf_token() }}">
从响应中复制值的页面发出 GET 请求。
向您的 POST 请求添加标头字段:
"X-CSRF-TOKEN: "copied_token_in_previous_get_response"
Run Code Online (Sandbox Code Playgroud)