【问题标题】:laravel 7 + vue.js 3 + passport 401 Unauthorizedlaravel 7 + vue.js 3 + 护照 401 未经授权
【发布时间】:2021-09-24 06:01:37
【问题描述】:

您好,我正在尝试使用 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
        })
    },

【问题讨论】:

    标签: php laravel vue.js laravel-passport


    【解决方案1】:

    如果您不需要提供 oauth2,您可能想看看 Laravel Sanctum,它更轻量级且更易于设置 (https://laravel.com/docs/8.x/passport#passport-or-sanctum)。

    但如果你真的需要护照,首先要检查的是你是否按照 Passport 安装说明 (https://laravel.com/docs/8.x/passport#installation) 中的每一步操作,例如 php artisan passport:install

    【讨论】:

    • 也许我不需要提供 oauth2,但我在 sanctum 遇到了同样的问题,所以我尝试了护照。是的,我做的每一步都包括护照:安装
    【解决方案2】:

    我认为你的 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');
    }
    

    【讨论】:

    • 同样的问题...仍然是 401 错误,但是 .... 在 bootstrap.js 中是 const token = '' 我得到 api 数据,但如果 const token = 'here is token' 我得到 401错误,我认为是相反的方式?
    • 什么是“令牌”引用。有 Auth Tokens 和 CSRF Tokens。你的刀片模板头中有 csrf 元标记吗?
    • 身份验证令牌....是的,我的刀片模板中有元标记
    • 并且您在 /public/api/posts 路由上使用 auth:api 中间件?
    • 并且您已将laravel.com/docs/8.x/… createfreshapitoken 添加到您的app/Http/Kernel.php
    【解决方案3】:

    这可能是迟到的答案。但是在清除我的缓存之后,令牌现在就像一个魅力。

    php artisan optimize:clear
    

    帮助我解决问题。你也可以试试这个

    我发现在更改配置中的 auth.php 文件以指示 api 路由使用正确的设置后,Laravel 已经缓存了差异值,这在尝试清除这些缓存时变得很困难

    【讨论】:

      猜你喜欢
      • 2019-02-01
      • 2018-02-04
      • 2019-12-05
      • 2021-11-30
      • 2017-10-18
      • 1970-01-01
      • 2018-11-03
      • 2018-05-19
      • 2019-10-22
      相关资源
      最近更新 更多