Laravel Sanctum (бывший воздушный шлюз) - как выпустить токены для других моделей?

Я впервые пробую laravel sanctum.

Я хочу выпустить токены для красноречивой модели под названием «Кампания».

Это мой 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. Я знаю, что это следствие того, что я здесь сделал.

Может ли этот пакет выдавать токены на основе чего-то, что на самом деле не является пользователем?

Если вы знаете, как это сделать правильно, буду благодарен за ответ :)


person Guilherme Assemany    schedule 26.03.2020    source источник


Ответы (2)


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

person Zoran Panev    schedule 07.04.2020

person    schedule
comment
Привет, Амир, спасибо! Думаю, это хорошее решение, и я его уже пробовал. Он работает почти так же, как и я. Мне все еще нужно вызвать auth () - ›user (), чтобы войти в кампанию. А у вас сейчас есть ли другой способ залогиниться в модели? подход auth () - ›user () немного сбивает с толку. - person Guilherme Assemany; 30.03.2020
comment
Вы используете его для Интернета или API? - person Ameer Manathat; 30.03.2020
comment
Только API. Этот объект не сможет войти в систему через Интернет. Это только для некоторых маршрутов API. - person Guilherme Assemany; 30.03.2020