【问题标题】:Laravel: Auth guard [sanctum] is not definedLaravel:未定义身份验证守卫[sanctum]
【发布时间】:2021-05-01 13:59:48
【问题描述】:

我正在尝试通过Sanctum 在 Laravel 中实现身份验证。我完成了文档中的所有步骤。 Generation of Token 工作正常,但是当我尝试使用 auth:sanctum 中间件时,它返回错误 Auth guard [sanctum] is not defined.

这是我的文件:
/routes/api.php

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Dashboard;


Route::middleware('auth:sanctum')->get('/dashboard/get_current_client/', [Dashboard::class, 'get_current_client']);

Route::get('/dashboard/client_data/', [Dashboard::class, 'client_data']);

/config/auth.php

<?php

return [

    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],

    
    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
            'hash' => false,
        ],
    ],

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\Models\Client::class,
        ],

        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ],


    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
            'throttle' => 60,
        ],
    ],

    'password_timeout' => 10800,

];

/app/Models/Client.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Laravel\Sanctum\HasApiTokens;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;



class Client extends Authenticatable
{
    use HasFactory, HasApiTokens, Notifiable;

    protected $table = 'client';
    protected $primaryKey = 'client_id';
    public $timestamps = false;
}

/app/Http/Controllers/Dashboard.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Client;



class Dashboard extends Controller
{
    public function client_data () {
        $user = Client::where('client_id', 1)->first();
        return $user->client_id;
    }

    public function get_current_client(Request $request) {
        var_dump($request->user());
    }
}

【问题讨论】:

  • 您是否按照文档中的说明将 Sanctum 的中间件添加到应用程序的 app/Http/Kernel.php 文件中的 api 中间件组中?
  • 您的意思是添加这一行吗? \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,据我在文档中看到的,只有在将其用于自己的 SPA 时才需要它。我打算将它用于公众。所以不需要这个。但刚刚将其添加到实验中。还是不行。
  • 啊,是的,我是这个意思。这很奇怪。根据您的描述和所做的一切似乎都很好。
  • 是的,它的行为就像 Sanctum 服务提供商从未注册过任何东西......github.com/laravel/sanctum/blob/2.x/src/…
  • 但为什么会这样呢?我该如何解决?

标签: php laravel laravel-sanctum


【解决方案1】:

我发现了问题。由于某种原因,/bootstrap/cache 中的缓存没有更新。手动删除后,一切都开始工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 2018-05-12
    • 2020-12-14
    • 2017-11-23
    • 2018-11-21
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    相关资源
    最近更新 更多