繁体   English   中英

如何使用 CSRF 令牌测试 Laravel / Sanctum 端点

[英]How to test Laravel / Sanctum endpoint with CSRF tokens

我有一个无头 laravel 实例连接到子域上的 SPA。 作为我的第一个测试,我希望在未登录的情况下尝试从 api 检索用户数据时看到 401。我的 api 路径定义如下:

Route::middleware('auth:sanctum')->get('/user', 'UserAccountController@get_profile');

我知道在用户成功连接到应用程序之前需要 CSRF 令牌,但我不确定如何将其包含在我的测试过程中,如下所示

public function testExample()
{
    $response = $this->get('/api/user');
    $response->assertStatus(401); //  getting a 500 instead
}

在文档的Sanctum 测试部分,我看到了以下方法:

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

对我来说,这里的问题是我不想尝试以用户身份加载此路径,我想知道如何模拟具有令牌但未登录的客户端计算机。这可能吗?

根据 laravel 闲聊中的“Nick”,我需要将请求更改为以下内容:

public function testExample()
{
    $response = $this->getJson('/api/user');
    $response->assertStatus(401);
}

get()假定您正在执行正常请求,而getJSON()处理必要的 header 设置。 此调用以我在应用程序中看到的相同方式返回 401。

此外,以下内容可用于测试假设的 JSON 响应

$response->assertJson([
  "message" => "User Unauthorized"
]);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM