Проблемы CORS с Slim PHP API - «Ответ на сбой HTTP: 0 Неизвестная ошибка»Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Проблемы CORS с Slim PHP API - «Ответ на сбой HTTP: 0 Неизвестная ошибка»

Сообщение Anonymous »

У меня возникли проблемы, связанные с CORS, при отправке запросов к моему Slim PHP API из моего приложения Angular. Я получаю следующее сообщение об ошибке в консоли:

Ошибка из консоли журнала клиента: XHROPTIONS
http://localhost:8080/api /validate Отсутствуют учетные данные CORS
Запрос из нескольких источников заблокирован (перекрестный источник): критерий
соответствия источника не позволяет читать удаленный
ресурс из http : //localhost:8080/api/validate. Причина: ожидается «истина»
в заголовке CORS «Access-Control-Allow-Credentials».
Запрос из нескольких источников заблокирован (перекрестный источник): критерий
соответствие источника не позволяет читать удаленный
ресурс с http://localhost:8080/api/validate. Причина: запрос CORS
не выполнен. Код состояния: (нулевой).
Ответ об ошибке HTTP для http://localhost:8080/api/validate: 0
Неизвестная ошибка

Вот мой код промежуточного программного обеспечения:
php

Код: Выделить всё

  $fitnetApi->slim->add(function (Request $request, Response $response, callable $next) {
$uri = $request->getUri()->getPath();

// Controlla se l'URI inizia con '/api'
if (strpos($uri, '/api') === 0) {
$cookies = $request->getCookieParams();
$token = $cookies['jwt_token'] ?? null; // Usa l'operatore null coalescing

// Se non c'è un token, continua con il middleware successivo
if (!$token) {
return $response
->withHeader("Content-Type", "application/json")
->withStatus(401)
->write(json_encode([
"status" => "error",
"message" => "token invalid"
], JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT));
}

try {
// Decodifica il token
$decoded = JWT::decode($token, new Key('', 'HS256'));

// Controlla se il token è scaduto
if (isset($decoded->exp) && $decoded->exp < time()) {

$rtoken = $cookies['rjwt_token'] ?? null;;
$decRjwt = JWT::decode($rtoken, new Key('', 'HS256'));

// Controlla se il rtoken esiste e non è scaduto
if ($decRjwt && isset($decRjwt->exp) && $decRjwt->exp > time()) {
// Rigenera un token
$newToken = JWT::encode(
[
'id' => $decoded->id,
'type' => $decoded->type,
'exp' => time() + 60 * 15 // 15 minuti
],
"",
"HS256"
);

// Aggiunge il nuovo token come attributo alla richiesta
$request = $request->withAttribute('new_token', $newToken);
} else {
// Se il rtoken è scaduto, restituisci un errore
return $response
->withHeader("Content-Type", "application/json")
->withStatus(401)
->write(json_encode([
"status" => "error",
"message" => "rtoken expired, renew auth"
], JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT));
}
}
} catch (ExpiredException $e) {
// Gestisci il caso in cui il token JWT è scaduto
return $response
->withHeader("Content-Type", "application/json")
->withStatus(401)
->write(json_encode([
"status" => "error",
"message" => "Token expired"
], JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT));
} catch (SignatureInvalidException $e) {
// Gestisci il caso in cui il token JWT è invalido
return $response
->withHeader("Content-Type", "application/json")
->withStatus(401)
->write(json_encode([
"status" => "error",
"message" => "Invalid token signature"
], JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT));
} catch (\Exception $e) {
// Gestione generica di eccezioni JWT
return $response
->withHeader("Content-Type", "application/json")
->withStatus(401)
->write(json_encode([
"status" => "error",
"message" =>  "Invalid token"
], JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT));
}
}

// Continua con il prossimo middleware o la route
return $next($request, $response);
});
Настройки Cors в промежуточном программном обеспечении:

Код: Выделить всё

 $fitnetApi->slim->add(new Tuupola\Middleware\CorsMiddleware([
"origin" => ["http://localhost:8100"],
"methods" => ["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"],
"headers.allow" => ["Token", "Authorization", "If-Match", "If-Unmodified-Since", "Content-Type"],
"headers.expose" => ["Authorization"],
"credentials" => true,
"cache" => 0,
]));

The error occurs when making a POST request to http://localhost:8080/api/validate.
Despite the CORS headers being set, I still receive an "Unknown Error" with a status of 0.
Я проверил, что серверная часть работает на локальном хосте: 8080.
API правильно отвечает на запросы, сделанные через Postman.
Я проверил наличие ошибок JavaScript в приложении Angular.
Что может быть причиной этих проблем CORS и как я могу исправить ошибку, чтобы мое приложение Angular могло успешно взаимодействовать с Slim PHP API?Будем благодарны за любую помощь!

Подробнее здесь: https://stackoverflow.com/questions/791 ... nown-error
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»