首页 > 解决方案 > 没有用户模型的 Laravel 护照 createToken

问题描述

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

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

由于我可以访问user_id,是否可以在不创建另一个查询 ( User::find) 的情况下创建令牌?

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

标签: laravellaravel-passport

解决方案


这是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 毫秒。这种取舍似乎不值得。


推荐阅读