Laravel X-CSRF-令牌与POSTMAN不匹配

llew8vvj  于 2022-11-07  发布在  Postman
关注(0)|答案(8)|浏览(184)

我尝试与使用Laravel构建的REST API通信。但由于令牌不匹配,使用POSTMAN的调用被拒绝。我想我需要在标头中包含CSRF令牌。但我是否需要加密的令牌?当我插入此令牌时,我仍然收到令牌不匹配的错误。
我使用以下方法检索令牌:

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

但这是否应该在每次刷新时更改?

j13ufse2

j13ufse21#

如果您不使用表单(例如,对于API),您可以按照以下步骤操作https://gist.github.com/ethanstenis/3cc78c1d097680ac7ef0
基本上,添加以下到您的刀片或树枝头

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

安装Postman Interceptor(如果尚未安装),并将其打开
然后,在浏览器中登录到站点(您需要获得授权),并检查元素或查看源代码以检索令牌
在Postman中,根据需要设置GET/POST等,并在头中创建一个新的对

X-CSRF-TOKEN        tokenvaluetobeinserted235kwgeiOIulgsk

有些人建议在测试API时关闭CSRF令牌,但这样做并不是真正在测试它。
如果你发现你仍然有错误,使用preview检查返回的响应,因为Laravel的错误信息往往相当明确。如果什么都没有返回,检查你的php_error.log(不管它叫什么)。
ps 2018年10月-我现在使用Laravel Passport来处理API注册、登录和用户令牌-值得一看!

l5tcr1uw

l5tcr1uw2#

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

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

z9smfwbn3#

是的,每次刷新它都会改变。你应该把它放在视图中,当你发布它的时候,它需要作为“_token”POST变量的值发送。
如果您只是使用标准POST,只需将以下内容添加到表单中:

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

如果您使用 AJAX ,请确保获取_token的值并将其与请求一起传递。
参考:http://laravel.com/docs/5.1/routing#csrf-protection

4ktjp1zp

4ktjp1zp4#

使用 Postman
向任何具有
<meta name="csrf-token" content="{{ csrf_token() }}">
从响应中复制值。
将标头字段添加到POST请求:

"X-CSRF-TOKEN: "copied_token_in_previous_get_response"
yws3nbqq

yws3nbqq5#

我在我的Postman环境中使用baseURL变量时遇到了这个错误。原来我调用的网站URL末尾没有/api。听起来很傻,但为了避免用户错误,请确保您的请求URL基于:
https://<your-site-url>/api
非:
https://<your-site-url>

oogrdqng

oogrdqng6#

如果您正在使用REST API,则根据Laravel文档,使用api.php写入路由,而不是web.phpweb.php用于为网站写入路由,这就是您在像API一样使用它时看到csrf-token错误的原因,因此对于API,我们有api.php文件,该文件不会给予您csrf-token错误

bz4sfanl

bz4sfanl7#

我刚刚遇到了同样的问题,这个答案最终帮助我解决了这个问题:https://stackoverflow.com/a/67435592/11854580
很明显,CSRF令牌需要在每次POST请求时更新(而不是每次GET请求时)。您可以使用Postman中的pre-request-script来解决这个问题,如本教程所述:https://blog.codecourse.com/laravel-sanctum-airlock-with-postman/

k4ymrczo

k4ymrczo8#

在url中添加/api可以解决大多数人的问题,比如https://www.yoursite.com/api/register

相关问题