为什么在尝试通过邮递员通过 "api/login" 获取访问令牌时使用护照 returns "Unauthenticated"?

Why passport returns "Unauthenticated" when trying to get access token via "api/login" through postman?

所以,我已经在这个问题上苦苦思索了一个小时。它在我的旧 PC 上工作,但从 git 中取出后,它停止工作了。

下面是我的api.php:

Route::post('/login', 'API\UserController@login');

Route::group(['middleware' => 'auth:api'], function(){
// Some other routes are here
});

我正在尝试从 post 人发送 post 请求以获取访问令牌。请求看起来像这样:

POST /api/login HTTP/1.1
Host: localhost:8000
Content-Type: multipart/form-data; boundary=---- 
WebKitFormBoundary7MA4YWxkTrZu0gW
Accept: application/json
Cache-Control: no-cache
Postman-Token: aa1a5889-5383-60f4-7425-4c8019f7f144

------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="email"

admin@somewhere.com
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="password"

123456
------WebKitFormBoundary7MA4YWxkTrZu0gW--

作为回应,我得到:

{
    "message": "Unauthenticated."
}

到目前为止我尝试过的:

  1. 确定,我在 Laravel 5.6

  2. 中正确地遵循了 passport 安装程序
  3. 尝试在根目录中创建一个 .htaccess 文件,如下所示:

    重写引擎开启

    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    

我是 运行 使用 "php artisan serve" 的服务器,除了停止并再次 运行 之外不知道如何重新启动服务器。

  1. 添加了一行打印护照错误日志

    error_log($e->getHint());

它没有在 laravel 日志中打印任何内容(我不太确定它可能会将其日志文件转储到哪里)。

我已经有一段时间没碰 laravel 了,这些问题听起来应该很傻。非常感谢您的帮助。

试试这个

POST /api/login HTTP/1.1
Host: localhost:8000
Accept: application/json
Content-Type: application/json
cache-control: no-cache
Postman-Token: aa1a5889-5383-60f4-7425-4c8019f7f144
{
   "email": "admin@somewhere.com",
   "password": "123456"
}------WebKitFormBoundary7MA4YWxkTrZu0gW--

问题既不在控制器也不在护照。我最终列出了带有 php artisan 的所有路由,并遍历了带有路由 "api/login" 的所有中间件定义。在我的特殊情况下,"api/login" 路由在 "api" 中间件下。奇怪的是,api 中间件定义在下面列出了 "auth:api"。删除它,一切又开始工作了。至于 api.php 中的其他路由,我已经将它们分组在 "auth:api" 中间件下。