Laravel Sanctum默认模型自定义



我在Laravel应用程序`MongoDB中使用composer包作为数据库驱动程序:

https://github.com/jenssegers/laravel-mongodb

默认情况下,Laravel模型扩展IlluminateDatabaseEloquentModel类。

但当我使用MongoDB then my models must extend theJenssegers\Mongodb\Eloquent\Model`类而不是默认的Laravel类时。

我现在可以如何将Laravel Sanctum默认扩展模型类LaravelSanctumPersonalAccessToken替换为JenssegersMongodbEloquentModel

示例

<?php
namespace LaravelSanctum;
// use IlluminateDatabaseEloquentModel;                      // Replace this class
use JenssegersMongodbEloquentModel;                          // To this class
use LaravelSanctumContractsHasAbilities;
class PersonalAccessToken extends Model implements HasAbilities
{
// sanctum model
}

现在我可以在vendor文件夹中这样做,但我认为这是不正确的方式。如何正确地解决这个问题?

您需要做的是创建一个自定义PersonalAccessToken(您只需复制原始的"Laravel\Ssantum\PersonalAccessToken.php"(然后只需更改

use IlluminateDatabaseEloquentModel

对于

use JenssegersMongodbEloquentModel

最后在\Providers\AuthServiceProvider 中

您必须添加引导功能

public function boot()
{
$this->registerPolicies();
Sanctum::usePersonalAccessTokenModel(PersonalAccessToken::class);
}

在我的搜索中,我找到了这个包:Laravel Sanctum Mongo

它可以为您服务,基本上只是安装

步骤1:

复制此型号LaravelSanctumPersonalAccessToken并粘贴到您的自定义型号AppModelsSanctumPersonalAccessToken

步骤2:

查找use IlluminateDatabaseEloquentModel;并替换为use JenssegersMongodbEloquentModel;

步骤3:

AppProvidersAppServiceProvider中添加以下内容:

// Loader Alias
$loader = AliasLoader::getInstance();
// SANCTUM CUSTOM PERSONAL-ACCESS-TOKEN
$loader->alias(LaravelSanctumPersonalAccessToken::class, AppModelsSanctumPersonalAccessToken::class);

准备好了,为我工作

我还必须在vendor文件夹NewAccessToken文件中添加以下内容:

use AppModelsSanctumPersonalAccessToken;

根据这个问题,santum只支持扩展默认模型,可能不会考虑添加接口。但我们可以欺骗自动加载器加载我们的类,而不是默认的类。

以下是操作方法:

步骤1:将/vendor/laravel/sanctum/src/PersonalAccessToken.php文件复制到/app/overrides/PersonalAccessToken.php

步骤2:编辑/app/overrides/PersonalAccessToken.php并替换use IlluminateDatabaseEloquentModel;用CCD_ 17;

第3步:编辑composer.json文件并编辑自动加载部分,如下所示:

"autoload": {
"exclude-from-classmap": ["vendor\laravel\sanctum\src\PersonalAccessToken.php"],
"psr-4": {
"App\": "app/",
"Database\Factories\": "database/factories/",
"Database\Seeders\": "database/seeders/",
"Laravel\Sanctum\": "app/overrides/" 
}
},

步骤4:运行composer dump-autoload

这解决了我在windows机器中的问题,但该解决方案可能不适用于不同的操作系统,因为我还没有全部尝试过。(如果这在你的操作系统中有效,请评论你的操作程序名称(

信用额度https://github.com/laravel/sanctum/issues/263

最新更新