你好,我试图用 Laravel 护照保护 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
})
},
答案 0 :(得分:0)
如果您不需要提供 oauth2,您可能需要查看 Laravel Sanctum,它更轻巧且更易于设置 (https://laravel.com/docs/8.x/passport#passport-or-sanctum)。
但如果您真的需要通行证,首先要检查您是否按照通行证安装说明 (https://laravel.com/docs/8.x/passport#installation) 中的每一步进行操作,例如 php artisan passport:install
答案 1 :(得分:0)
我认为你的 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');
}