Php 使用Passport的Laravel API身份验证导致401(未经授权)

Php 使用Passport的Laravel API身份验证导致401(未经授权),php,laravel,api,authentication,laravel-passport,Php,Laravel,Api,Authentication,Laravel Passport,在Laravel上关于API路由的文档之后,我目前在使用Axis从API获取数据时遇到了一些问题 到目前为止,我已经通过Composer安装了Passport,添加了hasApiTokens特性,在AuthServiceProvider的引导方法中添加了对Passport::routes的调用,并将api身份验证卫士的驱动程序选项设置为“Passport” 由于我希望用户在登录后通过Javascript从基于Vue的SPA使用API,因此我将CreateFreshApiToken添加到web中间

在Laravel上关于API路由的文档之后,我目前在使用Axis从API获取数据时遇到了一些问题

到目前为止,我已经通过Composer安装了Passport,添加了hasApiTokens特性,在AuthServiceProvider的引导方法中添加了对Passport::routes的调用,并将api身份验证卫士的驱动程序选项设置为“Passport”

由于我希望用户在登录后通过Javascript从基于Vue的SPA使用API,因此我将CreateFreshApiToken添加到web中间件组中

当我运行以下代码段测试所有内容时,就会出现问题:

axios.get('api/users').then( function(response) { console.log(response.data); }); 
结果是“加载资源失败:服务器响应状态为401(未授权)”响应

我已经检查了与Axis一起发送的请求中的头文件,并且头文件同时包含这两个文件

Cookie:laravel_token=eyJpdiI6ImJ5RG1KRk….

X-XSRF-TOKEN:EYJPDII6ILVRRHXSXP2VDVY…


我做错了什么吗?

尝试将身份验证中间件添加到
Kernel.php的api组中

    'api' => [
        'throttle:60,1',
        'bindings',
        'auth:api',
    ],

尝试将auth中间件添加到
Kernel.php的api组中

    'api' => [
        'throttle:60,1',
        'bindings',
        'auth:api',
    ],

试试这个命令,它对我来说就像一个符咒

php artisan config:cache

试试这个命令,它对我来说就像一个符咒

php artisan config:cache

我能够解决数十人或数百人在线报告的错误,但除了以下解决方案外,现有的解决方案都不适用于我。
使用Laravel 5.8,按照以下文档设置Passport

在我的例子中,虽然我在元标记中包含了csrf令牌,但由于Passport文档声明默认情况下laravel会这样做,所以它没有被提取。从文档()中:

默认的Laravel JavaScript脚手架指示Axios始终 发送X-CSRF-TOKEN和X-Requested-With标头。“

然后提供了示例:

// In your application layout...
<meta name="csrf-token" content="{{ csrf_token() }}">

// Laravel's JavaScript scaffolding...
window.axios.defaults.headers.common = {
    'X-Requested-With': 'XMLHttpRequest',
};
在我的例子中,这是唯一允许我通过401未经授权错误的东西,这似乎表明:
A) 我的项目配置中的某些内容改变了axios请求的默认行为,没有根据元标记(如果存在)或

B) 文档在这一点上是不准确的,并且在当前版本的Laravel和Passport中,这不是所述的默认行为

我能够解决几十人或数百人在线报告的错误,但除了以下解决方案外,现有的解决方案都不适用于我。
使用Laravel 5.8,按照以下文档设置Passport

在我的例子中,虽然我在元标记中包含了csrf令牌,但由于Passport文档声明默认情况下laravel会这样做,所以它没有被提取。从文档()中:

默认的Laravel JavaScript脚手架指示Axios始终 发送X-CSRF-TOKEN和X-Requested-With标头。“

然后提供了示例:

// In your application layout...
<meta name="csrf-token" content="{{ csrf_token() }}">

// Laravel's JavaScript scaffolding...
window.axios.defaults.headers.common = {
    'X-Requested-With': 'XMLHttpRequest',
};
在我的例子中,这是唯一允许我通过401未经授权错误的东西,这似乎表明:
A) 我的项目配置中的某些内容改变了axios请求的默认行为,没有根据元标记(如果存在)或

B) 文档在这一点上是不准确的,并且在当前版本的Laravel和Passport中,这不是所述的默认行为

CreateFreshApiToken
必须位于最后一行

'web' => [
    // Other middleware...
    \Laravel\Passport\Http\Middleware\CreateFreshApiToken::class,
],

CreateFreshApiToken
必须位于最后一行

'web' => [
    // Other middleware...
    \Laravel\Passport\Http\Middleware\CreateFreshApiToken::class,
],

我尝试了下面的代码。将下面的代码粘贴到项目根文件夹的.htaccess文件中

RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]

我尝试了下面的代码。将下面的代码粘贴到项目根文件夹的.htaccess文件中

RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]

感谢您抽出时间回答!:-)我现在添加了auth:api中间件,但它仍然显示为未经授权。您的服务器在nginx上吗?我正在Vagrant/Homestead(nginx/1.11.9)上运行Laravel。您还可以从这个线程尝试一些事情:您是一个了不起的人!:)我整天都在讨论这个问题,ryanhungate在那页上的解决方案解决了这个问题。不是舒尔,如果它增加了其他一些问题,但目前我很高兴它能工作!:)非常感谢。感谢您抽出时间回答!:-)我现在添加了auth:api中间件,但它仍然显示为未经授权。您的服务器在nginx上吗?我正在Vagrant/Homestead(nginx/1.11.9)上运行Laravel。您还可以从这个线程尝试一些事情:您是一个了不起的人!:)我整天都在讨论这个问题,ryanhungate在那页上的解决方案解决了这个问题。不是舒尔,如果它增加了其他一些问题,但目前我很高兴它能工作!:)非常感谢。我有相同的错误,但下面的答案无法修复…您尝试了来自的修复吗?这为我修复了问题:我有相同的错误,但下面的答案无法修复…您尝试了来自的修复吗?这为我修复了问题: