Laravel 8 Sanctum:是否需要从 Authenticatable 扩展?

Laravel 8 Sanctum: Is it required to extend from Authenticatable?

一方面,我有一个扩展 Illuminate\Database\Eloquent\Model 的 Eloquent 模型 User。另一方面,我有 SanctumUser extends Authenticatable (https://laravel.com/docs/8.x/sanctum#issuing-api-tokens).

我想做的是,User extends Model, SanctumUser,但是在 PHP 7.x.

中,多重继承是不可能的

根据我上面链接的文档,我知道 SanctumUser 中使用了一些特征。这些特征是:use HasApiTokens, HasFactory, Notifiable;。如果我删除 extends Authenticatable 并将其替换为 extends ModelUser 将扩展 SanctumUser),您知道它们是否足够吗?

Authenticable 作为 Illuminate\Foundation\Auth\User 的别名 class 具有具有身份验证和授权方法的特征

<?php

namespace Illuminate\Foundation\Auth;

use Illuminate\Auth\Authenticatable;
use Illuminate\Auth\MustVerifyEmail;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\Access\Authorizable;

class User extends Model implements
    AuthenticatableContract,
    AuthorizableContract,
    CanResetPasswordContract
{
    use Authenticatable, Authorizable, CanResetPassword, MustVerifyEmail;
}

即使是任何新标准 Laravel 安装都可用的默认 User 模型 class 也扩展了 Authenticable class [使用 Illuminate\Foundation\Auth\User 作为可验证的;]

标准 Laravel 应用程序中的默认用户模型 class 还有两个特征 - Notifiable 和 HasFactory(因为 Laravel 8.x)

<?php

namespace App\Models;

use Illuminate\Notifications\Notifiable;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use HasFactory;
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name',
        'email',
        'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password',
        'remember_token',
        'two_factor_recovery_codes',
        'two_factor_secret',
    ];
}

使用 Sanctum,您可以将特征 HasApiToken 添加到用户模型 class。

为了轻松集成 Laravel Sanctum 或 Jetstream 或 Laravel UI 或 Breeze 以对您的应用进行身份验证和授权,最好让用户 class 扩展可验证 - 即插即用