and*_*dcl 3 php oauth-2.0 laravel laravel-passport
我已经为Laravel 5.3 设置了Laravel Passport包,正如官方文档(https://laravel.com/docs/5.3/passport#introduction)中所述.
我希望API由移动应用程序使用,因此我尝试实现密码授予令牌.我创建了一个密码授予客户端,以及令牌请求进程......
$response = $http->post('http://my-app.com/oauth/token', [
'form_params' => [
'grant_type' => 'password',
'client_id' => 'client-id',
'client_secret' => 'client-secret',
'username' => 'my@email.com',
'password' => 'my-password',
'scope' => '',
],
]);
Run Code Online (Sandbox Code Playgroud)
...按预期工作,为我的一个用户返回访问令牌和刷新令牌.
一方面,
php artisan route:list
Run Code Online (Sandbox Code Playgroud)
列出api/user URI的正确中间件:api,auth:api
api guard的驱动程序在config/auth.php中正确设置为passport.总而言之,安装过程的每一步都已完成(https://laravel.com/docs/5.3/passport#installation).
默认api.php的内容:
Route::get('/user', function (Request $request) {
return $request->user();
})->middleware('auth:api');
Run Code Online (Sandbox Code Playgroud)
当我访问http://my-app.com/api/user时出现问题,因为它似乎是使用'web'中间件验证请求,而不是'api'...当我访问时,我是如果用户未登录,则重定向到/ login(登录表单),如果是,则重定向到/ home(登录表单)
任何帮助将非常感激.提前致谢.
解决了!仅供记录,解决方案:
我发送请求到http://my-app.com/api/user,HTTP Header错误.我发送:
Type: Authorization - Content: Bearer: $accessToken
Run Code Online (Sandbox Code Playgroud)
......正确的方法是:
Type: Authorization - Content: Bearer $accessToken (without colon)
Run Code Online (Sandbox Code Playgroud)
我从没想过这可能是一个错字......无论如何,错误并不容易被发现,因为重定向到登录表单从一开始就误导了我.我相信这确实是一种奇怪的行为......