我需要在 Laravel 11 中为 Sanctum 指定自定义表名称和模式。这是因为我们使用多个模式。为此,我需要创建一个覆盖 PersonAccessToken 的自定义模型。
Sanctum 提供了指定模型的方法:
Sanctum::userPersonalAccessModelTokenModel(CustomPersonalAccessToken::class);
以前,该文件会进入 boot 方法中的 AuthServiceProvider.php,但在 Laravel 11 中,该文件不再存在。我需要知道如何让 Laravel 知道我想要使用的类。以下是可供参考的课程:
<?php
namespace App\Models;
use Laravel\Sanctum\PersonalAccessToken as SanctumPersonalAccessToken;
class CustomPersonalAccessToken extends SanctumPersonalAccessToken
{
protected $table = 'vendorinv.PersonalAccessToken';
}
我已经尝试了文档中的解决方案,将其添加到服务提供商:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Laravel\Sanctum\Sanctum;
use App\Models\CustomPersonalAccessToken;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*/
public function register(): void
{
//
}
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Sanctum::usePersonalAccessTokenModel(CustomPersonalAccessToken::class);
}
}
我认为很明显 Sanctum 方法在提供程序中被忽略。任何帮助,将不胜感激。谢谢你
我收到的唯一错误是预期的,因为它试图到达错误的架构和表:
"message": "SQLSTATE[42S02]: Base table or view not found: 1146 Table 'websites.personal_access_tokens' doesn't exist (Connection: mysql, SQL: select exists(select * from `personal_access_tokens` where `tokenable_id` = 891) as `exists`)",
我需要它来达到:
vendorinv.PersonalAccessToken
任何帮助将不胜感激。谢谢你。
错误在我这边,我正在使用数据库外观来检查我的登录方法中的令牌。所以当然这是检查了错误的数据库。当我改用新模型后,一切都正常了。感谢您的有用评论,他们为我指明了正确的方向。