Laravel功能测试中如何登出通过actingAs登录的用户?
Laravel功能测试中actingAs登录后的登出实现方法
测试场景下通过$this->actingAs(self::$user, 'api');完成api守卫的用户登录后,因actingAs方法不支持传入null重置登录状态,可通过以下几种方式实现登出、重置认证状态:
- 直接调用对应认证守卫的登出方法(最常用、最直接的方式)
执行上述代码后,后续发起的测试请求将不再携带之前的用户认证身份,完全模拟未登录状态,适配Session、Sanctum、JWT等所有官方和第三方认证驱动。// 清除api守卫当前绑定的已登录用户 auth('api')->logout(); // 清除守卫实例缓存,彻底避免认证状态残留 $this->app['auth']->forgetGuards(); - 多测试用例场景下统一重置认证状态
如果需要避免单个测试用例里调用actingAs设置的登录状态污染同测试类下的其他用例,可以在测试类的setUp方法中统一重置守卫状态:protected function setUp(): void { parent::setUp(); // 每次执行测试用例前重置所有认证守卫,清除历史登录状态 $this->app['auth']->forgetGuards(); } - 模拟真实登出接口请求
如果你的测试逻辑需要覆盖登出接口本身,直接发起对应路由的请求即可,和真实用户触发登出的逻辑完全一致:// 对应你的项目中定义的api登出路由 $this->postJson('/api/auth/logout');
注意:不要尝试向
actingAs传入null、空模型实例等非法值重置状态,这类操作会触发参数类型错误,也无法正确清除认证缓存。
内容的提问来源于stack exchange,提问作者Florent Brassart
相关产品推荐
相关产品推荐

