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

Я впервые пробую laravel святилище.

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

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

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

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

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

0 голосов
/ 30 марта 2020
<?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();

    }
}
...