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

时间:2017-07-28 22:12:48

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

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

问题

每次我发出经过身份验证的请求时,回复都是{"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)

1 个答案:

答案 0 :(得分:0)

我的解决方案

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

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

  2. 我的"运营顺序"被关。我一直在请求令牌并以错误的顺序设置客户。我认为我的客户是用户,这是不正确的,也是我的许多问题的根源。

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

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

      

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

    由于我的解决方案并不要求我让护照工作,所以我只能帮助你。当我终于弄明白如何进行身份验证时,我意识到我并不需要它......

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

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

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