Skip to content

Create a custom PersonalAccessToken Model #2444

Closed as not planned
Closed as not planned
@ricardoaranha96

Description

@ricardoaranha96

Create a custom PersonalAccessToken Model
`use Laravel\Sanctum\Contracts\HasAbilities;
use Jenssegers\Mongodb\Eloquent\Model;

class PersonalAccessToken extends Model implements HasAbilities
{

/**
 * The attributes that should be cast to native types.
 *
 * @var array
 */
protected $casts = [
    'abilities' => 'json',
    'last_used_at' => 'datetime',
];

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

/**
 * The attributes that should be hidden for serialization.
 *
 * @var array
 */
protected $hidden = [
    'token',
];

/**
 * Get the tokenable model that the access token belongs to.
 *
 * @return \Illuminate\Database\Eloquent\Relations\MorphTo
 */
public function tokenable()
{
    return $this->morphTo('tokenable');
}

/**
 * Find the token instance matching the given token.
 *
 * @param  string  $token
 * @return static|null
 */
public static function findToken($token)
{
    if (strpos($token, '|') === false) {
        return static::where('token', hash('sha256', $token))->first();
    }

    [$id, $token] = explode('|', $token, 2);

    if ($instance = static::find($id)) {
        return hash_equals($instance->token, hash('sha256', $token)) ? $instance : null;
    }
}

/**
 * Determine if the token has a given ability.
 *
 * @param  string  $ability
 * @return bool
 */
public function can($ability)
{
    return in_array('*', $this->abilities) ||
        array_key_exists($ability, array_flip($this->abilities));
}

/**
 * Determine if the token is missing a given ability.
 *
 * @param  string  $ability
 * @return bool
 */
public function cant($ability)
{
    return !$this->can($ability);
}

}`

then use it in your appService provider

`use Illuminate\Support\ServiceProvider;
use App\Models\Sanctum\PersonalAccessToken;
use Illuminate\Foundation\AliasLoader;

class AppServiceProvider extends ServiceProvider
{

public function boot()
{

    // Loader Alias
    $loader = AliasLoader::getInstance();

    // SANCTUM CUSTOM PERSONAL-ACCESS-TOKEN
    $loader->alias(\Laravel\Sanctum\PersonalAccessToken::class, \App\Models\Sanctum\PersonalAccessToken::class);
}

}`

Originally posted by @kudjieRaymond in #2242 (comment)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions