3

我正在尝试测试经过身份验证的 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() 方法,也看不到该方法来自何处或在任何地方指定。任何帮助将不胜感激。

4

2 回答 2

4

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

于 2020-04-16T09:58:08.127 回答
3

您的 User 模型缺少HasApiTokens特性,该特性将您缺少的功能提供给 User 模型。文档中也有描述,在发行 API 令牌部分下。

use Laravel\Sanctum\HasApiTokens;

class User {
    use HasApiTokens;
}
于 2020-04-11T01:14:46.630 回答