You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel测试:如何验证SPA用户登出后的登录状态

测试SPA登出API的方案

针对SPA的Token认证场景,assertGuest()是基于Session校验的,确实没法直接用,你可以从以下两个维度验证登出操作是否生效:

1. 验证当前AccessToken已被删除

先创建用户并生成有效Token,调用登出接口后,直接检查数据库中对应用户的该AccessToken是否已被移除:

public function test_logout_deletes_current_access_token()
{
    $user = User::factory()->create();
    $token = $user->createToken('test-spa-token')->plainTextToken;

    // 携带Token调用登出接口
    $response = $this->withHeaders([
        'Authorization' => 'Bearer ' . $token,
    ])->post('/api/logout');

    $response->assertStatus(200);

    // 验证数据库中该Token记录已消失
    $this->assertDatabaseMissing('personal_access_tokens', [
        'tokenable_id' => $user->id,
        'name' => 'test-spa-token',
    ]);
}

2. 验证旧Token无法访问受保护接口

登出完成后,用原来的Token请求一个需要认证的接口,应该返回401未授权状态:

public function test_logout_revokes_token_permission()
{
    $user = User::factory()->create();
    $token = $user->createToken('test-spa-token')->plainTextToken;

    // 执行登出操作
    $this->withHeaders([
        'Authorization' => 'Bearer ' . $token,
    ])->post('/api/logout');

    // 尝试用旧Token调用用户信息接口
    $response = $this->withHeaders([
        'Authorization' => 'Bearer ' . $token,
    ])->get('/api/user');

    $response->assertStatus(401);
}

这两种验证方式结合,既能确认Token被物理删除,又能验证旧Token彻底失去权限,完全覆盖登出操作的有效性校验。

内容的提问来源于stack exchange,提问作者Muhammad Naveed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 21:45:32