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

不使用Authenticatable用户模型时如何实现Laravel认证测试

Laravel自定义认证场景下的测试会话实现方案

完全可以在测试流程中使用认证后生成的laravel_session cookie发起后续请求,不需要手动拼接请求头传递cookie,Laravel测试客户端自带会话持久化能力,适配自研认证逻辑的测试实现步骤如下:

  • 模拟完整认证流程,自动留存会话cookie
    你不需要改造现有自研认证逻辑,直接在测试方法中模拟用户真实的认证请求链路即可,测试客户端会自动留存整个请求过程中服务端返回的所有cookie,包括laravel_session。参考实现代码:

    public function test_auth_and_admin_access()
    {
        // 提交JSON格式的邮箱、密码认证参数
        $authResponse = $this->postJson('/your/custom/login/route', [
            'email' => 'test_account@example.com',
            'password' => 'test_account_password',
        ]);
    
        // 断言认证流程返回符合预期:重定向到认证页面
        $authResponse->assertRedirect('/your/auth/verify/page');
    
        // 跟进重定向请求,走完完整认证流程,过程中生成的laravel_session会被自动保存
        $this->followRedirects($authResponse);
    }
    
  • 后续请求自动携带认证态,无需手动处理cookie
    同一个测试方法内,完成认证流程后直接发起后台面板的相关请求即可,测试客户端会自动把之前留存的laravel_session cookie附加到请求中,和浏览器真实访问的行为完全一致,不需要手动提取cookie、也不需要手动往请求头塞参数:

    // 直接访问后台页面/接口,自动携带认证会话
    $adminPageResponse = $this->get('/admin/dashboard');
    // 断言可以正常访问后台,不会被认证拦截
    $adminPageResponse->assertStatus(200);
    
  • 特殊场景下手动获取、传递cookie的方法
    如果你有特殊测试需求需要手动拿到laravel_session的具体值,可以在走完完整认证流程后直接从测试客户端的cookie容器中获取,传递时调用框架提供的withCookie方法即可,不需要手动构造请求头:

    // 获取认证生成的session cookie
    $sessionCookie = $this->getCookieByName('laravel_session');
    
    // 手动附加cookie发起特殊请求
    $customRequestResponse = $this->withCookie(
        $sessionCookie->getName(),
        $sessionCookie->getValue()
    )->get('/your/special/custom/route');
    

注意:不要尝试手动将cookie拼接进请求头传递,这种方式会绕开Laravel自带的会话、cookie解析逻辑,大概率会导致认证校验失败,直接使用测试客户端提供的cookie相关方法即可。

内容的提问来源于stack exchange,提问作者Mehmet KÖSMEN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:57:32