problema al devolver un throw UnexpectedValueException con codigo 401

Iniciado por Razzari, 28 Agosto 2017, 00:25 AM

0 Miembros y 1 Visitante están viendo este tema.

Razzari

Hola como estan,
Mi problema es el siguiente, desde php estoy throweando la siguiente exception

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


y recivo esto como respuesta en mi front end

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 !  ;-)


"Los ordenadores son inutiles, solo pueden darte respuestas" Pablo Picasso

#!drvy

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 (php,20,21,22,23,24,25,26,27,28,29,30,31) [Seleccionar]
class SeguridadAuth {

   public function login($credenciales){
       if($credenciales['password'] !== '1234'){
           throw new Exception('Usuario no autorizado', 401);
       }

       return true;
   }



   public function realizarLogin(){

       $credenciales = array(
           'user' => 'Juan',
           'password' => '12345'
       );

       try {

           $this->login($credenciales);

       } catch(Exception $e){

           if($e->getCode() == 401){
               http_response_code(401);
               exit;
           }

       }

       return true;
   }



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

Razzari

Cita de: #!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 (php,20,21,22,23,24,25,26,27,28,29,30,31) [Seleccionar]
class SeguridadAuth {

   public function login($credenciales){
       if($credenciales['password'] !== '1234'){
           throw new Exception('Usuario no autorizado', 401);
       }

       return true;
   }



   public function realizarLogin(){

       $credenciales = array(
           'user' => 'Juan',
           'password' => '12345'
       );

       try {

           $this->login($credenciales);

       } catch(Exception $e){

           if($e->getCode() == 401){
               http_response_code(401);
               exit;
           }

       }

       return true;
   }



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 !!
"Los ordenadores son inutiles, solo pueden darte respuestas" Pablo Picasso