【问题标题】:Laravel Passport Authentication Issues: Always returns unauthenticatedLaravel Passport 身份验证问题:总是返回未经身份验证
【发布时间】:2018-01-05 02:10:59
【问题描述】:

看了几十个答案,我还是找不到解决他的问题的办法。

问题

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

路线

这是我一直在测试的路线。

use Illuminate\Http\Request;
use Laravel\Passport\Http\Middleware\CheckClientCredentials;

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

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

设置

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

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

我所做的和测试的

我检查了 .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"
    ]
]

怀疑

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

(编辑 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)

【问题讨论】:

  • 您是否在 Postman 的请求标头中发送字段“授权:承载 {access_token}”?
  • @louisfischer - 是的,这是一个GET 请求。另外,我的问题中发布的数组是返回的标头值。
  • 同样的问题,我已从 5.1 升级到 5.3,但无法进行护照身份验证。我已经完成了 oauth/authorize 和 oauth/token 查询,但似乎 CheckClientCredentials 无法记录用户。尝试获取更多信息
  • 在哪里可以找到解决方案?
  • 是的,但问题是我不知道如何正确使用这个工具。我会继续发布问题。

标签: php authentication laravel-5 oauth-2.0 laravel-passport


【解决方案1】:

我的解决方案

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

  1. 我的数据库设置不正确

  2. 我的“操作顺序”已关闭。我一直在请求令牌并以错误的顺序设置客户端。我认为我的客户是用户,这是不正确的,并且是我许多问题的根源。

  3. 我通常误用了该工具。我从来没有真正尝试过登录用户帐户,只有客户端一个。这当然没有意义,这也是我失败的原因。

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

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

由于我的解决方案不需要我让护照工作,我只能为您提供这么多帮助。当我终于弄清楚如何进行身份验证时,我意识到我不需要它...

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

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

如果你和我在同一条船上,实际上最好停止使用 Passport,那么我建议使用 Laravel 中的基本身份验证。它易于设置,学习时间不长。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-01
    • 2019-11-29
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 2019-06-14
    • 1970-01-01
    相关资源
    最近更新 更多