0

我第一次尝试 laravel sanctum。

我想为名为 Campaign 的 Eloquent 模型发行代币。

这是我的 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 对象时,情况会变得更糟。我知道这是我在这里所做的事情的结果。

这个包可以基于不是用户的东西来发行令牌吗?

如果您知道如何正确操作,我将不胜感激:)

4

2 回答 2

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

    }
}
于 2020-03-30T07:16:43.537 回答
0

除了您的评论,如果您想在请求的标头中获取活动发送令牌,然后在令牌表中搜索以找到相关的活动

于 2020-04-07T18:00:37.910 回答