Laravel Passport“auth:api”中间件充当“web,auth”中间件

问题描述:

我已经为Laravel 5.3设置了Laravel Passport包,正如官方文档(https://laravel.com/docs/5.3/passport#introduction)中所述。Laravel Passport“auth:api”中间件充当“web,auth”中间件

我希望API可以被移动应用程序使用,所以我试图实现密码授权令牌。我创建了一个密码授予客户端,并且令牌请求过程......

$response = $http->post('http://my-app.com/oauth/token', [ 
    'form_params' => [ 
     'grant_type' => 'password', 
     'client_id' => 'client-id', 
     'client_secret' => 'client-secret', 
     'username' => '[email protected]', 
     'password' => 'my-password', 
     'scope' => '', 
    ], 
]); 

...只是正常工作,恢复为我的用户之一的访问令牌刷新令牌

,一方面,

php artisan route:list 

列出了API /用户URI正确中间件:API,身份验证:API

,司机API后卫正确设置为在配置护照 /auth.php。总结,安装过程的每一步都已完成(https://laravel.com/docs/5.3/passport#installation)。

默认api.php的内容:

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

问题是当我访问http://my-app.com/api/user,因为它似乎是验证使用“网络”的中间件,而不是“API”的请求...... 当我访问,我被重定向到/登录(登录表单),如果用户没有登录,并且/ home,如果它是...

任何帮助将非常感激。 在此先感谢。

+0

你是否按照[这里](https://laravel.com/docs/5.3/passport#consuming-your-api-with-javascript)的指示如使用X-CSRF-TOKEN来利用您自己的API端点? – dargue3

+0

@ dargue3。是的,我还在\ Kernel.php中包含了\ Laravel \ Passport \ Http \ Middleware \ CreateFreshApiToken :: class,没有任何改变。但是我真的不想使用JavaScript来使用我自己的API。它是关于从外部移动应用程序中使用它的,为此我需要密码授权类型的方法...我仍然有问题。任何其他想法? – andcl

解决!只是为了记录,解决方案:

我发送请求到http://my-app.com/api/user与HTTP头错误。我会发送:

Type: Authorization - Content: Bearer: $accessToken 

...和正确的方法是:

Type: Authorization - Content: Bearer $accessToken (without colon) 

我从来没有想过这可能是一个错字......总之,错误是不容易察觉,因为重定向登录表单从一开始就误导了我。我相信这确实是一种奇怪的行为...

+1

我知道这是一个旧的帖子,但在这里值得一提的是,通过添加Authorization仍然无法正常工作,您还需要在头文件中添加一个Accept:“application/json”。这是最新版本的Laravel 5.5 –