Laravel Sanctum (бывший воздушный шлюз) - как выпустить токены для других моделей?
Я впервые пробую laravel sanctum.
Я хочу выпустить токены для красноречивой модели под названием Campaign.
Это мой Campaign.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Laravel\Sanctum\HasApiTokens;
class Campaign extends Model
{
use HasApiTokens;
protected $guarded = ['id'];
public function users()
{
return $this->belongsToMany(User::class)->withPivot(['percentage'])->withTimestamps();
}
}
Как видите, я поставил HasApiTokens
черта на нем.
С его помощью я могу выпустить токен на любую подобную кампанию:
$campaign->createToken('my-token-name');
Все идет нормально. Он работает и правильно хранится в базе данных.
Проблема начинается, когда я пытаюсь использовать токен для выполнения любого запроса, защищенного промежуточным программным обеспечением sanctum. Это ошибка, которая появляется, когда я это делаю:
Call to undefined method App\\Campaign::getAuthIdentifier()
Ну я думаю это getAuthIdentifier()
происходит от use Illuminate\Foundation\Auth\User
класс, который обычно импортируется в модель User как Authenticatable
;
Я попытался создать этот метод на своей модели Campaign и попробовать, вот что я сделал:
public function getAuthIdentifier()
{
return 'id';
}
Когда я снова попытался опубликовать, похоже, это сработало. Но я думаю, что это неправильно, потому что это немного странно. И становится еще хуже, когда я звонюauth()->user()
и я могу получить доступ к объекту Campaign. Я знаю, что это следствие того, что я здесь сделал.
Может ли этот пакет выдавать токены на основе чего-то, что на самом деле не является пользователем?
Если вы умеете правильно это делать, буду благодарен за ответ:)
2 ответа
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Laravel\Sanctum\HasApiTokens;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Auth\Authenticatable;
class Campaign extends Model implements AuthenticatableContract
{
use HasApiTokens,Authenticatable;
protected $guarded = ['id'];
public function users()
{
return $this->belongsToMany(User::class)->withPivot(['percentage'])->withTimestamps();
}
}
В дополнение к вашему комментарию, если вы хотите получить токен отправки кампании в заголовке запроса, а затем выполните поиск в таблице токенов, чтобы найти соответствующую кампанию.