【问题标题】:Call to undefined method Illuminate\Database\Query\Builder::withAccessToken()调用未定义的方法 Illuminate\Database\Query\Builder::withAccessToken()
【发布时间】:2017-07-19 19:03:25
【问题描述】:

当我在 api.php 文件中使用 postman 时出现此错误。

这里使用 Laravel 5.4 的文档示例是文件中的代码。

Route::get('/user', function (Request $request) {
return $request->user() ; })->middleware('auth:api');

在邮递员中我有这些设置。

出现这些错误似乎真的很不寻常,因为 HasApiTokens 在相关模型中,那么问题是什么?

【问题讨论】:

    标签: php laravel-5.3 laravel-5.4 laravel-passport


    【解决方案1】:

    答案很奇怪。我是通过查看 projectRoot/config/Auth.php 文件发现的。

    我在 Laravel 中设置为默认值的“用户”模型设置在错误的模型文件夹和模型名称下。见下图。

    正如您在第 70 行看到的那样,模型必须更改为您的用户或主模型的目录和模型名称,才能使身份验证正常工作。这 withAccessToken 可能会抛出你,但这是一个身份验证问题。

    【讨论】:

    • 我有'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\User::class, ], // 'users' => [ // 'driver' => 'database', // 'table' => 'users', // ], ], 仍然出现同样的错误,你有什么线索
    • 你刚刚让我免于长期头痛。这绝对是我的问题。
    【解决方案2】:

    我通过添加“使用 HasApiTokens, Notifiable;”解决了这个问题。在 App/User.php 中

    【讨论】:

      【解决方案3】:

      为我做了什么,直接进入 App/User.php 用户模型添加

      "使用 Laravel\Passport\HasApiTokens;"

      并直接进入de类

      "使用HasApiTokens,Authenticatable,Authorizable;"

      <?php
      
      namespace App;
      
      use Illuminate\Auth\Authenticatable;
      use Laravel\Lumen\Auth\Authorizable;
      use Illuminate\Database\Eloquent\Model;
      use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
      use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;
      use Laravel\Passport\HasApiTokens;
      
      class User extends Model implements AuthenticatableContract, AuthorizableContract
      {
          use HasApiTokens, Authenticatable, Authorizable;
      
          /**
           * The attributes that are mass assignable.
           *
           * @var array
           */
          protected $fillable = [
              'name', 'email',
          ];
      
          /**
           * The attributes excluded from the model's JSON form.
           *
           * @var array
           */
          protected $hidden = [
              'password',
          ];
      }
      

      就我而言,我使用的是 Lumen 5.3,但这解决了问题。

      【讨论】:

        猜你喜欢
        • 2014-04-23
        • 2020-01-04
        • 2018-10-03
        • 1970-01-01
        • 2019-04-02
        • 2016-11-25
        • 2017-01-18
        • 2018-05-11
        • 2014-09-01
        相关资源
        最近更新 更多