gpt4 book ai didi

php - laravel 6 护照中未经授权的 401 错误

转载 作者:行者123 更新时间:2023-12-05 02:38:30 27 4
gpt4 key购买 nike

我正在尝试使用 laravel 护照对用户进行身份验证。我遵循了 laravel 护照文档中的每一步。但是当我访问受“auth:api”中间件保护的路由时,它会显示错误。我已经在互联网上搜索过,但到目前为止,任何答案都不起作用。请在下面查看代码,以及我到目前为止所做的尝试。

使用的技术

  • 拉拉维尔 6
  • Laravel 护照
  • Vue 2
  • 公理

到目前为止已尝试:

  • Passport::routes(); 更改为 Passport::routes(null, ['prefix' => 'api/oauth', 'middleware' => ['auth: api', 'web', 'auth']]);AuthServiceProvider 中。还尝试了 Passport::routes(null, ['prefix' => 'api/oauth');
  • 尝试运行 php artisan cache:clear

routes/api.php

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

Route::get('posts', 'PostController@index')->name('posts');
Route::post('posts/store', 'PostController@store')->name('posts.store');
Route::get('posts/{id}/show')->name('posts.show');

Route::get('users/{id}/show')->name('users.show');
});

公理

mounted() {
axios.get('/api/posts')
.then(res => this.posts = res.data).catch(error => console.log('Unable to fetch posts.'))
}

错误

标题:

enter image description here

如果您需要一些我的帖子中尚未说明的详细信息,请告诉我。

设置

  1. 运行 composer require laravel/passport:9 进行安装。
  2. 为表运行 php artisan migrate
  3. 运行 php artisan passport:install 生成加密 key 。
  4. User 模型中添加了 Laravel\Passport\HasApiTokens trait。
  5. AuthServiceProvider 中添加了 Passport::routes();
  6. config/auth.php 中将 guardapi 驱动程序更改为 passport

完整源代码:

Click this link

最佳答案

我认为您应该按照以下步骤检查您的代码。

第 1 步:User 模型必须使用 HasApiTokens

...
class User extends Authenticatable
{
use HasApiTokens, Notifiable;
}

第 2 步:AuthServiceProvider 的引导方法中的Passport::routes 方法

class AuthServiceProvider extends ServiceProvider
{
...
public function boot()
{
$this->registerPolicies();

Passport::routes();
}
}

第三步:在你的config/auth.php配置文件中,你应该将api authentication guard的驱动选项设置为passport

'guards' => [
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
],

第 4 步(可选):如果您想从 JavaScript 应用程序使用 API,则需要手动向应用程序发送访问 token ,并将其与每个请求一起传递给您的应用程序。但是,Passport 包含一个可以为您处理此问题的中间件。您需要做的就是将 CreateFreshApiToken 中间件添加到您的 app/Http/Kernel.php 文件中的 web 中间件组:

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

!您应该确保 CreateFreshApiToken 中间件是中间件堆栈中列出的最后一个中间件。

编辑 (2021/10/17):
您应该尝试将 auth 中间件添加到 Kernel.php

$middlewareGroups
protected $middlewareGroups = [
...
'api' => [
'throttle:60,1',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
'auth:api', //Need to add
],
];

编辑(2021/10/25):
我下载了你的代码并调试了它。当你调试它时,你会得到如下结果:

enter image description here

header JWT 对 JSON 结构无效。 Laravel Passport 库和您的系统之间似乎不兼容。您应该检查您的系统版本(PHP、Laravel 等)。我会继续调查。如果您有任何新的信息,请告诉我

编辑(2021/11/02):

Update your laravel/framework dependency to ^6.0 in your composer.json file. If installed, update your laravel/passport dependency to ^9.3.2 in your composer.json file.

https://laravel.com/docs/6.x/upgrade#updating-dependencies

根据 Laravel 6.x 文档,Laravel Passport 的版本从 9.3.2 开始。请试试这个版本。

关于php - laravel 6 护照中未经授权的 401 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69532613/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com