使用Guzzle,是否可以在重定向之前修改基本身份验证?

时间:2017-04-03 11:50:19

标签: .htaccess redirect basic-authentication guzzle

我们需要测试重定向到另一个网址的网址。两者都使用基本身份验证进行保护,但重定向URL需要另一组凭据。

是否可以修改更改新/重定向网址的基本身份验证凭据的请求。

Guzzle有一个 let that = this; this.storage.ready().then(() => { return this.storage.get('userTemp'); }) .then(retrieved => updateLoginClose(retrieved)) .catch(e => console.error('ERROR: could not read Storage, error:', e)); function updateLoginClose(retrieved) { let isUserTemp:boolean; if (retrieved !== null) { isUserTemp = true; } else { isUserTemp = false; } that.data.showLoginClose = isUserTemp || that.UserService.getUser() || !that.isCordova.f(); } doc)选项,其allow_redirects回调可以访问请求和响应对象。

我们如何修改提供新凭据的请求?

1 个答案:

答案 0 :(得分:2)

IMO的简单方法是通过完全禁用重定向来“手动”执行此操作,并在这种情况下手动处理它们。

使用此解决方案,您可以使用任何新的/修改的选项创建第二个请求。

$initialResponse = $client->get(
    '/',
    [
        'allow_redirects' => false,
        'auth' => ['user1', 'pass1'],
    ]
);

// Check the exact status code from the redirect response.
if ($initialResponse->getStatusCode() === 303) {
    $finalResponse = $client->get(
        $initialResponse->getHeader('Location')[0],
        [
            'auth' => ['user2', 'pass2'],
        ]
    );
}

如果你想创建一个真正透明(对于最终用户)的解决方案,那么我建议深入研究中间件。