【发布时间】: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