Laravel Passport身份验证问题:始终返回未经身份验证的身份

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel Passport身份验证问题:始终返回未经身份验证的身份相关的知识,希望对你有一定的参考价值。

在查看了几十个答案之后,我仍然无法找到解决问题的方法。

Problem

每次我发出经过身份验证的请求时,响应都是{"error":"Unauthenticated."}

Routes

以下是我一直在测试的路线。

use IlluminateHttpRequest;
use LaravelPassportHttpMiddlewareCheckClientCredentials;

Route::get('/test', function () {
    return 'Hello World';
})->middleware('auth:api');

Route::middleware('auth:api')->get('/test2', function (Request $request) {
    return 'Hello World';
});

Setup

我按照教程指示设置了这个项目,并使用php artisan命令构建我的数据库。然后我开始使用Postman测试它。

使用grant_type: password,客户端凭据和用户凭据获取令牌。然后授予"Bearer " . $token类型。

What I've Done and Tested

我检查了.htaccess,令牌到期日期,命名空间和其他常见错误。我设置了一个测试功能来检查我的标题信息。结果发布在下面。出于某种原因,问题仍然存在。也没有任何实际错误...没有error.log更新,只是来自API的响应让我知道用户未经过身份验证。

 array:12 [
    "cookie" => array:1 [
        0 => "XSRF-TOKEN=eyJpdiI6IkwrNGxLOGVtc1M1Y2lYeUMraldTK3c9PSIsInZhbHVlIjoibHRzdVo3bFVJOFhuMDJvZ3RoNEYxK1NsdmhRenZkbmp5b2xuYXVzWTdIUGJ2WGFUbXBiK1JFQ0VNSVlNbjdIbHVmcndmKzBaMzVJbGkxelZFdllhM0E9PSIsIm1hYyI6ImZhMDJjZDIwNDgxMTRkMDdjYTBkYmMwODc4YzQ4ZmM3OGFkZTI3NzY1ZDA5NTAyODhkYjRlNTY1OGUyMTYyNGEifQ%3D%3D;  laravel_session=eyJpdiI6Im5hTnVLS3cyc1BzQldudkN2bFNcLzZRPT0iLCJ2YWx1ZSI6IjIwXC8yRkM3Sk4rWkg0ZFFlaG9RYVErc2ZJT0taSHoxOTU3UVpxejdPZ2MzcHBSc2FCd1NweEZwU2kzQXUxZ1VCVmY1dzZIZldFb2J5QXkwMFwvZmpId1E9PSIsIm1hYyI6ImQxZDIzOGQ0NzllOTg4NmZmZDk2NGI1NDNhMzcwNmI1MWE2MzY0YWIzZTgxZjYzOTAxYjhlMWQ1ZTExNzBiMTEifQ%3D%3D"
    ]
    "accept-language" => array:1 [
        0 => "en-US,en;q=0.8,fr;q=0.6"
    ]
    "accept-encoding" => array:1 [
        0 => "gzip, deflate, sdch"
    ]
    "postman-token" => array:1 [
        0 => "864e4343-e8f1-2efd-1a75-11660313ba3d"
    ]
    "authorization" => array:1 [
        0 => "Bearer 0dea6edd3f655463c4e19cf26ef10755bcfbff5dcdbe44cd44c1d7a84c250c359c65f064737752e6"
    ]
    "cache-control" => array:1 [
        0 => "no-cache"
    ]
    "accept" => array:1 [
        0 => "application/json"
    ]
    "connection" => array:1 [
        0 => "close"
    ]
    "x-http-proto" => array:1 [
        0 => "HTTP/1.1"
    ]
]

Suspicions

在这一点上,我想我必须使用一些错误的工具。我希望这是一个简单的错误,但我完全不知道它可能是什么。

(编辑1)范围问题:嘿,这可能是令牌的scope的问题吗?

(编辑2)SQL错误我设法找到一个错误来解决。虽然有点奇怪。

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'api_token' in 'where clause' (SQL: select * from `users` where `api_token` = {AccessToken} limit 1)
答案

My Solution

我的程序实际上有一些问题,但即使解决了它们,我仍然有错误。

  1. 我的数据库设置不正确
  2. 我的“行动秩序”已经关闭。我一直在请求令牌并以错误的顺序设置客户。我认为我的客户是用户,这是不正确的,并且是我的许多问题的根源。
  3. 我一般误用了这个工具。我从未真正尝试登录用户帐户,只登录客户端帐户。当然,这没有意义,这也是我失败的原因。

所以我的解决方案是完全停止使用Passport。

如果我还需要护照工作怎么办?

由于我的解决方案并不要求我让护照工作,我只能帮助你。当我终于想出如何验证是第二次我意识到我不需要它...

  1. 确保您的数据库设置正确。您可以通过在路由器内进行自己的数据库调用来进行调试来测试。确保您可以访问所有必填字段。
  2. 正确使用客户。我试图像客户一样使用客户端,因为我认为这是实现令牌API的最佳方式。它不是。确保您已经设置了用户帐户,并将客户端视为可以通过应用程序,第三方等进行爬升的“窗口”。也许退后一步并进行更多计划。

如果我不需要护照工作怎么办?

如果你和我在同一条船上,并且最好停止使用Passport,那么我建议在Laravel内部使用基本的auth。它易于设置,不需要很长时间才能学习。

以上是关于Laravel Passport身份验证问题:始终返回未经身份验证的身份的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.3 + Passport:总是未经身份验证的错误

身份验证用户提供程序 [passport] 未使用 laravel 护照定义

使用 Nuxt 前端实现 Laravel 7 Passport 身份验证

使用 Passport 进行 Laravel API 身份验证导致 401(未经授权)

使用 Laravel Lumen + Passport 获取经过身份验证的用户时出现问题

使用 Laravel 和 Passport 在身份验证失败时响应状态码 401?