![](/img/trans.png)
[英]Laravel Sanctum authenticate middleware auth:sanctum for different model
[英]Laravel Sanctum default model customization
我在 Laravel 應用程序中使用 MongoDB 作為數據庫驅動程序,使用 composer package:
https://github.com/jenssegers/laravel-mongodb
默認情況下,Laravel 模型擴展Illuminate\Database\Eloquent\Model
class。
但是當我使用MongoDB then my models must extend the
Jenssegers\Mongodb\Eloquent\Model` class 而不是默認的 ZA5C95B86291EA299FCBE64458ED127402Z ZA2DEBZ1AC298
我現在如何將 Laravel Sanctum 默認擴展 model class Laravel\Sanctum\PersonalAccessToken
替換為Jenssegers\Mongodb\Eloquent\Model
。
例子
<?php
namespace Laravel\Sanctum;
// use Illuminate\Database\Eloquent\Model; // Replace this class
use Jenssegers\Mongodb\Eloquent\Model; // To this class
use Laravel\Sanctum\Contracts\HasAbilities;
class PersonalAccessToken extends Model implements HasAbilities
{
// sanctum model
}
現在我可以在vendor
文件夾中執行此操作,但我認為這是不正確的方法。 如何正確解決這個問題?
您需要做的是創建一個自定義 PersonalAccessToken (您可以復制原始的“Laravel\Sanctum\PersonalAccessToken.php”)然后只需更改
use Illuminate\Database\Eloquent\Model
為了
use Jenssegers\Mongodb\Eloquent\Model
最后在 \Providers\AuthServiceProvider
您必須在引導中添加 function
public function boot()
{
$this->registerPolicies();
Sanctum::usePersonalAccessTokenModel(PersonalAccessToken::class);
}
在我的搜索中,我發現了這個 package: Laravel-Sanctum-Mongo
它可以為您服務,基本上它只是安裝
或者
步驟1:
復制此 Model \Laravel\Sanctum\PersonalAccessToken
並粘貼到您的自定義 model \App\Models\Sanctum\PersonalAccessToken
第2步:
找到use Illuminate\Database\Eloquent\Model;
並use Jenssegers\Mongodb\Eloquent\Model;
第 3 步:
在App\Providers\AppServiceProvider
中添加:
// Loader Alias
$loader = AliasLoader::getInstance();
// SANCTUM CUSTOM PERSONAL-ACCESS-TOKEN
$loader->alias(\Laravel\Sanctum\PersonalAccessToken::class, \App\Models\Sanctum\PersonalAccessToken::class);
准備好,為我工作
我還必須在vendor
文件夾NewAccessToken
文件中添加以下內容:
use App\Models\Sanctum\PersonalAccessToken;
根據這個問題,sanctum 僅支持擴展默認 model 並且可能不會考慮添加接口。 但是我們可以欺騙自動加載器加載我們的 class 而不是默認的。
這是如何做到的:
第 1 步:將/vendor/laravel/sanctum/src/PersonalAccessToken.php
文件復制到/app/overrides/PersonalAccessToken.php
第 2 步:編輯/app/overrides/PersonalAccessToken.php
並替換use Illuminate\Database\Eloquent\Model
; use Jenssegers\Mongodb\Eloquent\Model
;
第 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 機器中的問題,但該解決方案可能不適用於不同的操作系統,因為我沒有全部嘗試過。 (如果這在您的操作系統中有效,請評論您的操作系統名稱)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.