问题描述
通常,我可以按以下方式创建令牌:
$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毫秒的时间。权衡似乎不值得。