【问题标题】:Laravel Illuminate\Database\Eloquent\Collection::createToken does not existLaravel Illuminate\Database\Eloquent\Collection::createToken 不存在
【发布时间】:2019-08-10 23:55:42
【问题描述】:

创建新用户后,我尝试通过

创建令牌
$user = User::where('user_id', '=', $userid)->get();
$user->createToken('name')->accessToken;

然后我得到以下错误:

方法 Illuminate\Database\Eloquent\Collection::createToken 没有 存在。

谢谢

【问题讨论】:

    标签: laravel


    【解决方案1】:

    当您使用get() 方法时,您正在调用users集合,该方法没有createToken 方法(这正是错误消息告诉您的内容)。

    您需要调用单个 用户模型:

    $user = User::find($userid);
    

    然后,假设您的 User 模型上有 createToken 方法,这应该可以工作。

    按 cmets 编辑:

    除了集合与对象的原始问题之外,您可能还有其他一些问题阻止创建令牌。先尝试创建令牌:

    $user = User::find($userid);
    $token = $user->createToken('name');
    

    那么如果你要么得到一个错误(如果你的createToken方法不正确,或者参数'name'不正确等),或者你将拥有令牌,然后可以从中绘制accessToken新变量$token

    像这样:

    $accessToken = $token->accessToken
    

    无论哪种方式,这都会为您提供寻找错误的诊断。

    【讨论】:

    • 谢谢,但现在我得到了这个错误尝试获取非对象的属性
    • 那是因为没有userid,而你正在用$userid 推送。尝试使用已知用户 ID(如 User::find(1))的代码。这是您需要检查的标准错误 - (如果 isset($user),或使用 findOrFail,或类似的)
    • 但是数据不是空的,我在尝试返回 $user = User::find($userid); 后得到了所有用户数据;
    • 如果你转储$user 之前你尝试createToken,你有user 对象吗?
    • 好的,如果你有一个单一的用户对象,并且它里面有数据,你不应该得到非对象错误。在让用户*不尝试访问accesstoken 字段后立即尝试创建令牌。它可能试图在未正确创建令牌的情况下获取访问令牌。一分钟我将编辑我的答案来解释
    猜你喜欢
    • 2020-11-13
    • 2018-10-22
    • 2021-03-26
    • 1970-01-01
    • 2021-05-30
    • 2020-03-25
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多