【问题标题】:Issue with POST requests with Laravel Sanctum and PostmanLaravel Sanctum 和 Postman 的 POST 请求问题
【发布时间】:2021-08-25 18:11:57
【问题描述】:

我对与此帖子相关的 Sanctum 和 Postman 有疑问:SPA Authentication Issues with Sanctum and Postman

我遵循了 Laravel 文档中关于 Sanctum 的所有内容并正确配置了它。然后我跟着这个教程:https://blog.codecourse.com/laravel-sanctum-airlock-with-postman/

除了 POST 请求外,一切正常。当我登录时,它可以工作。但是我有一个没有预请求脚本的集合,当我向例如/user 发出 GET 请求时,它将返回登录用户。

但是当我在 Laravel 和 Postman 中将方法更改为 POST 时,我会收到 CSRF 令牌不匹配错误。

有人知道我必须做什么才能使 POST 请求正常工作吗?

Route::middleware('auth:sanctum')->post('/user', function (Request $request) {
    return $request->user();
});

【问题讨论】:

    标签: laravel postman laravel-sanctum


    【解决方案1】:

    我一直在我的一个电子商务 API 中使用sanctum,并且我也遵循了您在问题中链接的相同教程。很难说出您的实际问题是什么,但您似乎没有在 POST 请求中发送 X-XSRF-TOKEN 标头。

    上述教程中的last paragraph,作者展示了如何点击/logout路由,即POST路由。

    【讨论】:

    • 没错,当我在标头中使用X-XSRF-TOKENPOST 请求时,它可以正常工作。但这是一遍又一遍的同一个象征。我以为它是在 de cookie 中自动发送的?
    • 另外,/logout 是对/routes/web.php 的调用,你需要一个 CSRF 令牌。但我正在向/routes/api.php 提出请求。
    • 您能告诉我您如何在每个POST 请求中发送您的X-XSRF-TOKEN 吗?您是每次请求都创建一个新令牌还是一遍又一遍地使用相同的令牌?
    【解决方案2】:

    csrf_token 用于验证 laravel 中具有 POST 方法的表单,并且令牌是动态创建的, 你可以做两件事

    如果您正在编写 api,首先需要使用 https://<base_url>/apiroutes/api.php 中的路由,您不需要 csrf_token 但请确保使用正确的 api 身份验证

    其次,在您在邮递员上测试之前,禁用这些路由的 csrf 令牌,一旦您再次成功测试启用,它会提供安全性

    这样禁用

    <?php namespace App\Http\Middleware;
    
    use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
    
    class VerifyCsrfToken extends BaseVerifier
    {
      protected $except = [
        'submitMyForm/*',
      ];
    }
    

    【讨论】:

    • 我正在使用routes/api.php 进行提到的/user 调用。所以它不在routes/web.php 中。我还更改了路由,以便可以使用子域。但我认为禁用令牌不是一个好习惯。我不明白为什么我得到 CSRF 令牌不匹配,因为我正在向 /routes/api.php 发出请求,其中 CSRF 令牌没有被正确使用?
    猜你喜欢
    • 2018-02-11
    • 2021-10-22
    • 2021-04-05
    • 2023-03-28
    • 2014-11-19
    • 1970-01-01
    • 2018-11-28
    • 2022-11-11
    • 2020-07-02
    相关资源
    最近更新 更多