没有用户模型的Laravel护照createToken

问题描述

通常,我可以按以下方式创建令牌:

$user = User::find( $tokenData['user_id'] );
return $user->createtoken($tokenData['name'])->accesstoken;

由于我可以访问user_id,是否可以创建令牌而不用再创建一个查询User::find)?

因为理论上令牌本身与用户对象无关,而是与user_id(我在tokenData数组中拥有此令牌)无关。

解决方法

这是createToken特性的HasApiTokens方法:

public function createToken($name,array $scopes = [])
{
    return Container::getInstance()->make(PersonalAccessTokenFactory::class)->make(
        $this->getKey(),$name,$scopes
    );
}

基于此,看来您可以将代码更改为:

return app(\Laravel\Passport\PersonalAccessTokenFactory::class)->make($tokenData['user_id'],$tokenData['name'])->accessToken;

话虽这么说,最好只做一个额外的查询。您可能会更难以阅读,理解和维护您的代码,以节省大约1毫秒的时间。权衡似乎不值得。