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)