Saltar al contenido

Laravel – JWT Auth El token no se pudo analizar desde la solicitud

Solución:

A partir de su descripción, verifiqué el archivo fuente de JWT Auth.

En la clase TymonJWTAuthJWTAuth línea 191-219, hay dos funciones:

/**
 * Parse the token from the request.
 *
 * @param string $query
 *
 * @return JWTAuth
 */
public function parseToken($method = 'bearer', $header="authorization", $query = 'token')
{
    if (! $token = $this->parseAuthHeader($header, $method)) {
        if (! $token = $this->request->query($query, false)) {
            throw new JWTException('The token could not be parsed from the request', 400);
        }
    }

    return $this->setToken($token);
}

/**
 * Parse token from the authorization header.
 *
 * @param string $header
 * @param string $method
 *
 * @return false|string
 */
protected function parseAuthHeader($header="authorization", $method = 'bearer')
{
    $header = $this->request->headers->get($header);

    if (! starts_with(strtolower($header), $method)) {
        return false;
    }

    return trim(str_ireplace($method, '', $header));
}

Verifique la lógica de ellos, creo que el encabezado de su solicitud no se proporciona correctamente.

if (! $token = $this->parseAuthHeader($header, $method)) { // all your get method not passed this step
   if (! $token = $this->request->query($query, false)) { // all your post method stucked here 
       throw new JWTException('The token could not be parsed from the request', 400);
   }
}

Un encabezado con el formato adecuado se ve así:

http POST http://${host}/api/v1/product/favorite/111 "Authorization: Bearer ${token}"

Eso es todo lo que puedo ofrecerle, espero que le ayude con sus pensamientos. Si no es así, aún puede depurar esas dos funciones.

Tuve el mismo problema en ec2 amazon AMI Linux php7.2 apache2.4 pero el token se generó en los encabezados de solicitud de apache pero no estaba visible en el encabezado de solicitud de Laravel, así que agregue este código en middleware, esto funcionará solo en su servidor, pero es posible que no funcione en localhost.

 $headers = apache_request_headers();
 $request->headers->set('Authorization', $headers['authorization']);

Middleware de JWT

    try {
            $headers = apache_request_headers(); //get header
            $request->headers->set('Authorization', $headers['authorization']);// set header in request

            $user = JWTAuth::parseToken()->authenticate();
        } catch (Exception $e) {
            if ($e instanceof TymonJWTAuthExceptionsTokenInvalidException){
                return response()->json(['status' => 'Token is Invalid']);
            }else if ($e instanceof TymonJWTAuthExceptionsTokenExpiredException){
                return response()->json(['status' => 'Token is Expired']);
            }else{
                return response()->json(['status' => 'Authorization Token not found']);
            }
        }
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *