Laravel 没有用户模型的 passport createToken
Laravel passport createToken without User model
通常,我可以创建令牌如下:
$user = User::find( $tokenData['user_id'] );
return $user->createToken($tokenData['name'])->accessToken;
既然我可以访问 user_id
,是否可以创建一个令牌而无需再创建一个查询 (User::find
)?
因为理论上令牌本身与用户对象无关,但是 user_id(我在 tokenData 数组中有它)。
这是 HasApiTokens
特征中的 createToken
方法:
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 毫秒,您会让您的代码更难阅读、理解和维护。 trade-off似乎不值得。
通常,我可以创建令牌如下:
$user = User::find( $tokenData['user_id'] );
return $user->createToken($tokenData['name'])->accessToken;
既然我可以访问 user_id
,是否可以创建一个令牌而无需再创建一个查询 (User::find
)?
因为理论上令牌本身与用户对象无关,但是 user_id(我在 tokenData 数组中有它)。
这是 HasApiTokens
特征中的 createToken
方法:
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 毫秒,您会让您的代码更难阅读、理解和维护。 trade-off似乎不值得。