Laravel PHPUnit总是通过CSRF

时间:2016-06-09 19:27:28

标签: php laravel phpunit

我目前正在编写测试,以确保我们的CSRF保护在Laravel中有效。测试看起来像这样。

public function testSecurityIncorrectCSRF()
{
    $this->visit('/login')
     ->type('REDACTED', 'email')
     ->type('123123', 'password');

     session()->regenerateToken();

     $this->press('login')
     ->seePageIs('/login');
}

无论我做什么,即使我传递错误的_token,登录请求也会一直成功。我已经在PHPUnit测试之外尝试过,CSRF保护工作正常。我的所有中间件都已启用,因此应启用CSRF保护。

有人可以解释为什么会这样吗?

1 个答案:

答案 0 :(得分:4)

查看Illuminate\Foundation\Http\Middleware\VerifyCsrfToken课程,尤其是handle方法。

public function handle($request, Closure $next)
{
    if (
        $this->isReading($request) ||
        $this->runningUnitTests() ||
        $this->shouldPassThrough($request) ||
        $this->tokensMatch($request)
    ) {
        return $this->addCookieToResponse($request, $next($request));
    }

    throw new TokenMismatchException;
}

如果检测到请求来自单元测试,它始终会传递csrf令牌检查:$this->runningUnitTests()