-1

我尝试通过结合 CouchDB 和 Httpful 的 RESTful API 对用户进行身份验证。

客户端将用户的凭据发送到我的服务器,服务器将它们转发到 CouchDB 服务器。

当我var_dump做出响应时,我可以看到内容在那里,但我无法提取我想发送回客户端的 cookie。

我的服务器上的身份验证功能:

public function authenticate($request, $response)
{             
    $username = $request->getParsedBody()['username']; 
    $password = $request->getParsedBody()['password']; 

    $uri = "http://localhost:5984/_session";

    $sessionToken = \Httpful\Request::post($uri)    
        ->sendsJson()                                 
        ->body('{"name":"'.$username.'", "password":"'.$password.'"}')
        ->send();                                   

    $cookie = $sessionToken->headers->headers[6];

    return $response->withHeader('Set-Cookie', $cookie);
}

响应对象:

object(Httpful \ Response) # 56(13) {
    ["body"] => object(stdClass) # 58(3) 
        ...

    ["raw_body"]
        ...

    ["headers"] => object(Httpful \ Response \ Headers) # 57(1) {
        ["headers": "Httpful\Response\Headers": private] => array(6) {
            ...
            ["set-cookie"] => string(85)"AuthSession=abc123; Version=1; Path=/; HttpOnly"
        }
    }

    ["raw_headers"]
        ...

    ["code"]
        ...
}

错误信息:

Cannot access private property Httpful\Response\Headers::$headers

我想知道如何Set-Cookie使用 Httpful 访问该属性。我浏览了这个问题的网络,不幸的是,我似乎是唯一一个面临这个特殊问题的人。


我找到了一个解决方案:

我只需要将这两行添加到我的身份验证控制器中:

$myArray = array_values($sessionToken->_parseHeaders($sessionToken->raw_headers));

$cookie = $myArray[5];

_parseHeaders我在 Httpful 的 API 文档中找到并结合array_values.

4

1 回答 1

1

-class的实例Headers设置为$sessionToken->headers,您可以像数组一样访问它。

你得到的set-cookie标题:

$sessionToken->headers['set-cookie'];
于 2017-07-27T18:57:17.853 回答