你好,我正在尝试使用 Laravel Passport 来保护 API,但总是抛出 401 未经授权的错误。 我在哪里犯了错误?有什么帮助吗?谢谢你。
我添加到 User.php HasApiTokens 中,
并取消注释
'App\Model' => 'App\Policies\ModelPolicy'
并添加到 AutServiceProvider.php 中的启动 Passport:routes(),
在
auth.php 'api' => [
'driver' => 'passport',]
在RegisterController.php中
protected function create(array $data)
{
$user = User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
$token = $user->createToken('API Token')->accessToken;
return $user;
}
在 bootstrap.js 中
const token = '3acdc8cddb433947ea7cc51de909fdc50dcdf601ac521ac37ff1b3ee3a61e47e2111d297a07e147e'
window.axios = require('axios');
window.axios.defaults.withCredentials = true;
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
window.axios.defaults.headers.common['Authorization'] = `Bearer ${token}`;
在 Posts.vue axios
mounted() {
axios.get('/public/api/posts').then(response=>{
this.data =response.data
})
},
如果您不需要提供 oauth2,您可能需要看看 Laravel Sanctum,它更轻量且更易于设置(https://laravel.com/docs/8.x/passport#passport-或-圣所)。
但是,如果您确实需要 Passport,首先要检查的是您是否遵循 Passport 安装说明中的每一步(https://laravel.com/docs/8.x/passport#installation),例如
php artisan passport:install
我认为你的 headers.common 中仍然需要 x-csrf-token
let csrf_token = document.head.querySelector('meta[name="csrf-token"]');
if (csrf_token) {
window.axios.defaults.headers.common['X-CSRF-TOKEN'] = csrf_token.content;
} else {
console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');
}
也许这可能是迟来的答案。但在清除我的缓存后,令牌现在就像一个魅力一样。
php artisan optimize:clear
帮助我解决问题。你也可以尝试一下
我发现在更改配置中的
auth.php
文件以指示 api
路由使用正确的设置后,Laravel 已经缓存了不同的值,这在尝试清除这些缓存时变得很困难