【问题标题】:Laravel sanctum unauthenticatedLaravel sanctum 未经身份验证
【发布时间】:2023-03-10 23:32:01
【问题描述】:

我在我的项目中使用 Laravel sanctum 以 angular 作为前端。从第二个 api 请求中获取未经身份验证。请让我知道我哪里出错了

前端-> 127.0.0.1:4200

后端-> localhost:8888

.env 配置

SESSION_DOMAIN=本地主机 SANCTUM_STATEFUL_DOMAINS=127.0.0.1

将中间件auth:sanctum添加到api.php中的路由组

参考:https://prnt.sc/rm9ejy

【问题讨论】:

    标签: laravel-7 laravel-sanctum


    【解决方案1】:

    从您分享的屏幕截图中,我看到您的域是 localhost 而不是 127.0.01,请执行以下操作:

    SANCTUM_STATEFUL_DOMAINS=localhost
    

    【讨论】:

      【解决方案2】:

      对于使用 Laravel Homestead 的任何人,请使用您的实际域。

      SANCTUM_STATEFUL_DOMAINS=homestead.test
      

      【讨论】:

      • 在我的计算机的/etc/hosts 文件下使用虚拟域“app.test”时,这对我有用
      【解决方案3】:

      您运行的是哪个版本?从 V2.4.0 开始您需要指定端口:

      SANCTUM_STATEFUL_DOMAINS=localhost:4200
      

      请参阅此issue 了解更多信息。

      【讨论】:

        【解决方案4】:

        对于遇到未经验证的错误的任何人,请确保您遵循这些步骤。

        • 向 /sanctum/csrf-cookie 发送 GET 请求
        • 向网络路由 /login 发送 post 请求以进行身份​​验证

        经过这一步,你将被API路由中的auth:sanctum中间件成功认证。

        其他需要注意的事项:

        1. 确保您的 SESSION_DOMAIN 设置为 localhost
        2. SANCTUM_STATEFUL_DOMAIN 设置为带有端口的子域/SPA,例如 localhost:8000

        对于原始问题,请确保您保持相同的域。我的意思是两者都使用 localhost 。并设置 SANCTUM_STATEFUL_DOMAIN = localhost:4200

        已编辑

        同时设置 SESSION_DRIVER

        【讨论】:

        • 我认为对/sanctum/csrf-cookie 的请求需要是GET 请求。
        【解决方案5】:

        两天的痛苦和绝望得出了这个结论:Bearer 令牌没有附加到请求中,那是因为我的 .htaccess 配置。

        如果你和我一样,无法通过 API 令牌进行身份验证,请尝试在 Laravel 项目的公共目录中的 .htaccess 文件中添加这一行:

        RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
        

        就在RewriteEngine On 指令之后。

        致谢:Laravel not detecting auth token sent in the header and JWT package

        【讨论】:

        • Sanctum 不使用令牌进行有状态身份验证。它使用 cookie。
        • 痛苦和绝望,我知道你的感受!
        • 谢谢,以上解决方案有效!我自己浪费了很多时间。
        【解决方案6】:

        添加您的域,例如 我的 API 在 localhost:8000 上运行我的客户端在 localhost:3000 上运行所以我的环境设置如下所示

        SANCTUM_STATEFUL_DOMAINS=localhost:8000,localhost:3000
        

        另外,添加您的会话域

        SESSION_DOMAIN=localhost
        

        【讨论】:

        • 我用自定义域名来调用后端和前端就像(后端)api.devtest.test(前端)devtest.testSESSION_DOMAIN应该写什么?
        【解决方案7】:

        The sanctum stateful domains require the port number as well.

        例如SANCTUM_STATEFUL_DOMAINS=127.0.0.1:4200

        虽然在你的情况下你的截图显示它应该是SANCTUM_STATEFUL_DOMAINS=127.0.0.1:4201

        【讨论】:

          【解决方案8】:

          我有与 Marco 相同的解决方案,将重写规则添加到我的 htaccess 中公开修复了它。

          重写规则 ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

          仅供参考,如果其他人正在这样做,我将其托管在 Auzre Web App Service (linux) 上。

          【讨论】:

            【解决方案9】:

            您检查过您的 Kernel.php 吗? app/Http/Kernel.php

            确保您取消注释 \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, 因为默认情况下它正在被评论

            'api' => [
                \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
                'throttle:api',
                \Illuminate\Routing\Middleware\SubstituteBindings::class,
            ],
            

            【讨论】:

            猜你喜欢
            • 2020-12-14
            • 2020-09-09
            • 2021-05-24
            • 2021-05-01
            • 2022-01-17
            • 1970-01-01
            • 2023-02-18
            • 2021-04-24
            • 2019-06-14
            相关资源
            最近更新 更多