Php 使用Passport的Laravel API身份验证导致401(未经授权)
在Laravel上关于API路由的文档之后,我目前在使用Axis从API获取数据时遇到了一些问题 到目前为止,我已经通过Composer安装了Passport,添加了hasApiTokens特性,在AuthServiceProvider的引导方法中添加了对Passport::routes的调用,并将api身份验证卫士的驱动程序选项设置为“Passport” 由于我希望用户在登录后通过Javascript从基于Vue的SPA使用API,因此我将CreateFreshApiToken添加到web中间件组中 当我运行以下代码段测试所有内容时,就会出现问题: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中间
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在那页上的解决方案解决了这个问题。不是舒尔,如果它增加了其他一些问题,但目前我很高兴它能工作!:)非常感谢。我有相同的错误,但下面的答案无法修复…您尝试了来自的修复吗?这为我修复了问题:我有相同的错误,但下面的答案无法修复…您尝试了来自的修复吗?这为我修复了问题: