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 Model
(User
将扩展 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 扩展可验证 - 即插即用
一方面,我有一个扩展 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 Model
(User
将扩展 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 扩展可验证 - 即插即用