Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Razzari en 28 Agosto 2017, 00:25 am



Título: problema al devolver un throw UnexpectedValueException con codigo 401
Publicado por: Razzari en 28 Agosto 2017, 00:25 am
Hola como estan,
Mi problema es el siguiente, desde php estoy throweando la siguiente exception

https://fotos.subefotos.com/24f1afa503c047007f78ce82c0d182bbo.png (https://fotos.subefotos.com/24f1afa503c047007f78ce82c0d182bbo.png)


y recivo esto como respuesta en mi front end

https://fotos.subefotos.com/5fdff315dd820d1d4674fdf4206de0dbo.png (https://fotos.subefotos.com/5fdff315dd820d1d4674fdf4206de0dbo.png)

El problema es que llega con codigo 200, es decir 'ok' pero en mi throw yo esoty pasando como parametro el codigo 401 que es Unauthorized, a demas me en mi log aparece el nombre del archivo que dio error y la el numero de linea,

Alguien sabe en que estoy fallando ??  :o

Desde ya gracias y saludos !  ;-)




Título: Re: problema al devolver un throw UnexpectedValueException con codigo 401
Publicado por: #!drvy en 28 Agosto 2017, 03:44 am
La clase Exception acepta un código de error que no tiene nada que ver con el STATUS HTTP. Es decir, el hecho de que pongas 401 como segundo parámetro, no quiere decir que PHP tiene que tirar un header 401. De hecho, las excepciones no fueron pensadas para eso ni mucho menos. Fueron pensadas para que se pudiesen capturar y analizar, no que redirigan porque si.

Entonces lo que tendrias que hacer, es tirar una excepción con ese codigo (o cualquier otro..), y luego usar try/catch a la hora de ejecutar el método.

Código
  1. class SeguridadAuth {
  2.  
  3.    public function login($credenciales){
  4.        if($credenciales['password'] !== '1234'){
  5.            throw new Exception('Usuario no autorizado', 401);
  6.        }
  7.  
  8.        return true;
  9.    }
  10.  
  11.  
  12.  
  13.    public function realizarLogin(){
  14.  
  15.        $credenciales = array(
  16.            'user' => 'Juan',
  17.            'password' => '12345'
  18.        );
  19.  
  20.        try {
  21.  
  22.            $this->login($credenciales);
  23.  
  24.        } catch(Exception $e){
  25.  
  26.            if($e->getCode() == 401){
  27.                http_response_code(401);
  28.                exit;
  29.            }
  30.  
  31.        }
  32.  
  33.        return true;
  34.    }
  35.  


http://php.net/manual/es/language.exceptions.php
http://php.net/manual/es/class.exception.php
http://php.net/manual/es/function.http-response-code.php

Saludos


Título: Re: problema al devolver un throw UnexpectedValueException con codigo 401
Publicado por: Razzari en 29 Agosto 2017, 01:29 am
La clase Exception acepta un código de error que no tiene nada que ver con el STATUS HTTP. Es decir, el hecho de que pongas 401 como segundo parámetro, no quiere decir que PHP tiene que tirar un header 401. De hecho, las excepciones no fueron pensadas para eso ni mucho menos. Fueron pensadas para que se pudiesen capturar y analizar, no que redirigan porque si.

Entonces lo que tendrias que hacer, es tirar una excepción con ese codigo (o cualquier otro..), y luego usar try/catch a la hora de ejecutar el método.

Código
  1. class SeguridadAuth {
  2.  
  3.    public function login($credenciales){
  4.        if($credenciales['password'] !== '1234'){
  5.            throw new Exception('Usuario no autorizado', 401);
  6.        }
  7.  
  8.        return true;
  9.    }
  10.  
  11.  
  12.  
  13.    public function realizarLogin(){
  14.  
  15.        $credenciales = array(
  16.            'user' => 'Juan',
  17.            'password' => '12345'
  18.        );
  19.  
  20.        try {
  21.  
  22.            $this->login($credenciales);
  23.  
  24.        } catch(Exception $e){
  25.  
  26.            if($e->getCode() == 401){
  27.                http_response_code(401);
  28.                exit;
  29.            }
  30.  
  31.        }
  32.  
  33.        return true;
  34.    }
  35.  


http://php.net/manual/es/language.exceptions.php
http://php.net/manual/es/class.exception.php
http://php.net/manual/es/function.http-response-code.php

Saludos

Hola ! estuve leyendo bastante la documentación que pasaste !
Ya lo estoy poniendo en practica ! Genial !
del lado del front tengo mi servicio que según el tipo de error que reciba es el mensaje que muestra !
Saludos y como siempre gracias !!