Laravel Sanctum Token API 身份验证在 Postman 中不起作用

Posted

技术标签:

【中文标题】Laravel Sanctum Token API 身份验证在 Postman 中不起作用【英文标题】:Laravel Sanctum Token API Authentication Not Working in Postman 【发布时间】:2020-09-22 16:44:37 【问题描述】:

我正在尝试将 Sanctum 用于仅 API 的应用程序。我没有将它用于 SPA。我有一个由 Sanctum 中间件设置和保护的端点。我正在通过 tinker cli 工具为该用户创建一个用户和一个令牌。然后,我将令牌粘贴到授权选项卡中不记名令牌选择下的 Postman 中。但是,当我提交请求时,我收到一个未经身份验证的错误。不太确定我在这里做错了什么。密切关注提供的文档以及我能找到的稀疏视频。这是一些代码sn-ps。我很欣赏这里的洞察力。

API.php

Route::middleware('auth:sanctum')->apiResource('/documents','DocumentHandlerController');

中间件/Authenticate.php

class Authenticate extends Middleware

    /**
     * Return 401 when not authorized
     *
     * @param  \Illuminate\Http\Request  $request
     * @return string|null
     */
    public function handle($request)
    
        return response()->json(
            ['message'=>'Unauthorized']
            ,Response::HTTP_UNAUTHORIZED
        );
    

我的控制器的功能

    public function index()
    
        return response()->json(['Success'],Response::HTTP_OK);
    

【问题讨论】:

我在这里接受纠正,但几周前我遇到了与您类似的问题。我认为问题在于 Sanctum 使用基于 cookie 的身份验证,并且需要在 web.php 中进行 CSRF 保护和状态管理。您是在使用 sanctum cookie 身份验证还是在这种情况下使用 api 令牌?我最终通过使用 web.php 而不是 api.php 解决了这个问题。我不确定这有多大帮助,但这对我有用 你能解释一下,你是如何创建令牌的? 【参考方案1】:

我遇到了类似的问题,我收到了回复 "message":"Unauthenticated."

对我来说,这是因为在我的 .env 文件中,我的 APP_URL 是 https://www.example.com,而我试图通过 URL https://example.com 访问 API。

当我将进行 API 调用的 URL 更改为 https://www.example.com 时,它正在工作。

【讨论】:

我无法再访问代码库,但我几乎可以肯定这是问题所在。我像其他人提到的那样添加了 'guard' => 'api' ,但这仍然没有解决问题。我认为这是正确的。 @KileyPoole 很高兴听到我可能会帮助你!祝你有美好的一天;)【参考方案2】:

我遇到了同样的问题,但我通过添加到标题解决了它:Accept with value application/json

这是我发现的最佳解决方案,也许其他人有其他解决方案。

【讨论】:

【参考方案3】:

面临同样的问题。经过一番调查,问题似乎发生在那里: https://github.com/laravel/sanctum/commit/f5695aecc547138c76bc66aaede73ba549dabdc5

在重构期间,他们忘记了包含默认保护定义。

只需在 config/sanctum.php 的末尾添加 api 保护:

'guard' =>  'api'

【讨论】:

【参考方案4】:

由于某种原因,auth:sanctum 不适用于 API 身份验证。我也遇到了同样的问题,然后我在 github 上看到了这个问题。 我现在看到了两种解决方案

    jwt-auth API Authentication

【讨论】:

以上是关于Laravel Sanctum Token API 身份验证在 Postman 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

用于非 SPA 的 Laravel Sanctum API 令牌

Laravel sanctum 获得 401 未授权

Laravel Sanctum auth:sanctum 路由允许在没有承载令牌的情况下访问

如何使用 CSRF 令牌测试 Laravel / Sanctum 端点

Sanctum Laravel 8 用于 API 身份验证的问题(不会在注销时删除令牌)

使用 laravel Sanctum 和 api 令牌身份验证获取用户时出现 401(未经授权)[重复]