【问题标题】:Testing Laravel Sanctum acting as results in bad method call测试 Laravel Sanctum 会导致错误的方法调用
【发布时间】:2020-07-23 19:40:33
【问题描述】:

我正在尝试测试一个经过身份验证的 API 路由,只有经过身份验证的用户才能发布到特定路由。

查看 Laravel Sanctum 文档,我可以使用下面的代码来创建和验证用户:

Sanctum::actingAs(
    factory(User::class)->create(),
    ['*']
);

当我尝试复制它时,运行测试时出错

BadMethodCallException: Call to undefined method App\User::withAccessToken()

我的测试代码如下:

    public function an_authenticated_user_can_add_a_client()
    {
        $user = Sanctum::actingAs(
            factory(User::class)->create(),
            ['*']
        );
        dd($user);
        // $this->post('/api/clients', $this->data());
    }

api.php

Route::middleware('auth:sanctum')->group(function () {

    //Clients
    Route::get('/clients/{client}','ContactsController@show');
    Route::post('/clients','ContactsController@store');
    Route::patch('/clients/{client}','ContactsController@update');
    Route::delete('/clients/{client}','ContactsController@destroy');
});

我的 User 类中没有 withAccessToken() 方法,并且无法看到该方法来自何处或在任何地方指定。 任何帮助将不胜感激。

【问题讨论】:

    标签: laravel laravel-sanctum


    【解决方案1】:

    用于 SPA 的 Laravel Sanctum 使用普通会话身份验证,因此默认的 actuatorAs 方法可以正常工作。 Sanctum 中的 actuatorAs 方法旨在用于 api 令牌。希望对您有所帮助。

    【讨论】:

      【解决方案2】:

      您的 User 模型缺少 HasApiTokens 特征,它将您缺少的功能提供给 User 模型。也在documentation 的Issuing API Tokens 部分中进行了描述。

      use Laravel\Sanctum\HasApiTokens;
      
      class User {
          use HasApiTokens;
      }
      

      【讨论】:

      • 我明白了,效果很好,谢谢。虽然我注意到在文档中,它提到 API 令牌不应该用于第一方 SPA(我正在构建一个 SPA),请原谅我缺乏经验,我想在我的情况下发布一个 API 令牌测试以查看经过身份验证的用户是否可以添加到数据库中?据我了解,SPA 身份验证只是获取 csrf-cookie 而不是令牌?
      • 如果您使用 SPA 身份验证,请参阅 Javier 的答案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-29
      • 2022-11-24
      • 1970-01-01
      • 1970-01-01
      • 2015-04-04
      • 1970-01-01
      相关资源
      最近更新 更多