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();

    }
}

В дополнение к вашему комментарию, если вы хотите получить токен отправки кампании в заголовке запроса, а затем выполните поиск в таблице токенов, чтобы найти соответствующую кампанию.

Другие вопросы по тегам