如何使用 CSRF 令牌测试 Laravel / Sanctum 端点
Posted
技术标签:
【中文标题】如何使用 CSRF 令牌测试 Laravel / Sanctum 端点【英文标题】:How to test Laravel / Sanctum endpoint with CSRF tokens 【发布时间】:2020-11-22 22:05:46 【问题描述】:我有一个无头 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 testing 部分,我看到了以下方法:
Sanctum::actingAs( factory(User::class)->create(), ['view-tasks'] );
对我来说,这里的问题是我不想尝试以用户身份加载此路径,我想知道如何模拟具有令牌但未登录的客户端计算机。这可能吗?
【问题讨论】:
【参考方案1】:根据 laravel 闲聊中的“Nick”,我需要将请求更改为以下内容:
public function testExample()
$response = $this->getJson('/api/user');
$response->assertStatus(401);
get()
假设您正在执行正常请求,而 getJSON()
处理必要的标头设置。此调用返回 401 的方式与我在应用程序中看到的方式相同。
此外,以下可用于测试假设的 JSON 响应
$response->assertJson([
"message" => "User Unauthorized"
]);
【讨论】:
以上是关于如何使用 CSRF 令牌测试 Laravel / Sanctum 端点的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 ajax 在 LARAVEL 中获取新的 CSRF 令牌
如何在 vuejs 组件中使用 laravel csrf 令牌
如何使用 AJAX 请求 Laravel + Vue.js 传递 CSRF 令牌