Jorge Rodriguez Comesaña
Jorge Rodriguez Comesaña
Laravel
Comparte:

Laravel HTTP Client | Consulta sobre los Cookies

 
Hola, tengo una consulta sobre el HTTP client de Laravel. 
Estoy desarrollando un Traits para interactuar con Alfresco Resp API. 
Exactamente son dos problemas. En este momento hice algo que por decirlo de alguna manera funciona. Pero realmente no me gusta. 
El primer problema: 
                Primero tengo que regístrame en alfresco y obtener un ticket, hasta aquí sin problema. Pero el tema viene cuando tengo que usar ese ticket. 
Para usar el ticket necesito dos cosas el JSESSIONID que viene dentro de los Cookies. 
Y luego para usar el ticket tengo que pasarlo en el withBasicAuth encriptado en base64 junto con el Cookie de sección. Pero el withBasicAuth me exige dos variables, y solo tengo una. 
Si pongo la segunda en blanco, el código en base64 está mal. 
Te paso lo que escribí, que funciona, pero repito no me gusta como quedo. Gracias 
    public function Createticket($alfresco)
    {
        $url = $alfresco['url'].'/alfresco/api/-default-/public/authentication/versions/1/tickets';
        $body = json_encode([
            'userId' => $alfresco['username'],
            'password' => $alfresco['password']
        ]);
        $request = Http::accept('application/json');
        $request->withBasicAuth($alfresco['username'], $alfresco['password']);
        $request->withBody($body,'application/json');
        $response = $request->post($url);
        $this->jsessionid = $response->cookies()->getCookieByName('JSESSIONID')->toArray()['Value'];
        $this->ticket = $response->object()->entry->id;
        return $response->successful();
    }
    public function MountRequest($alfresco)
    {
        $domain = Str::replace('http://','',$alfresco['url']);
        $domain = Str::replace('https://','',$domain);
        $domain = Str::replace(':8080','',$domain);
        $request = Http::accept('application/json');
        $request->withCookies(['JSESSIONID' => $this->jsessionid],$domain);
        $request->withHeaders(['Authorization' => 'Basic '. base64_encode($this->ticket), ]);
        return $request;       
    }
   
    public function Validateticket($alfresco)
    {
        $url = $alfresco['url'].'/alfresco/api/-default-/public/authentication/versions/1/tickets/-me-';
        $request = $this->MountRequest($alfresco);
        $response = $request->get($url);
        return $response->successful();
    }