KI-Backend: Authorization-Header-Fix + TODO-Ergänzungen (4.5.11-4.5.14)
Login funktionierte, aber jede authentifizierte Folgeanfrage (Guthaben, KI-Anfrage) meldete fälschlich eine abgelaufene Anmeldung — viele Apache/PHP-FPM-Hosting-Setups reichen den Authorization-Header standardmäßig nicht an PHP durch. .htaccess erzwingt jetzt die Weiterleitung, db.php liest zusätzlich REDIRECT_HTTP_AUTHORIZATION/ getallheaders() als Fallback. AiBackendUrl auf die echte deployte Domain gesetzt. TODO.md: KI-Unterstützung auch für Stundenplanung (4.5.11), Frage zu einem console.claude.ai-Agent für Standardkontext vs. app-internem Standard-Prompt (4.5.12/4.5.13), sowie ein Planungsdiff für KI-Vorschläge auf Feldebene statt grober Neu/Geändert-Markierung (4.5.14).
This commit is contained in:
+26
-1
@@ -13,6 +13,31 @@ function ai_backend_db(array $config): PDO
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Liest den Authorization-Header — auf vielen Apache/PHP-FPM-Setups landet er NICHT in
|
||||
* $_SERVER['HTTP_AUTHORIZATION'] (Header wird von PHP-FPM standardmäßig verworfen), sondern nur
|
||||
* in $_SERVER['REDIRECT_HTTP_AUTHORIZATION'] (nach der .htaccess-Weiterleitung, siehe dort) oder
|
||||
* ist nur über getallheaders() erreichbar. Alle drei Quellen abklappern, statt sich auf eine zu
|
||||
* verlassen — genau das war die Ursache für "Login klappt, danach sofort Session abgelaufen".
|
||||
*/
|
||||
function ai_backend_authorization_header(): string
|
||||
{
|
||||
if (!empty($_SERVER['HTTP_AUTHORIZATION'])) {
|
||||
return $_SERVER['HTTP_AUTHORIZATION'];
|
||||
}
|
||||
if (!empty($_SERVER['REDIRECT_HTTP_AUTHORIZATION'])) {
|
||||
return $_SERVER['REDIRECT_HTTP_AUTHORIZATION'];
|
||||
}
|
||||
if (function_exists('getallheaders')) {
|
||||
foreach (getallheaders() as $name => $value) {
|
||||
if (strcasecmp($name, 'Authorization') === 0) {
|
||||
return $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Bearer-Token aus dem Authorization-Header lesen, gegen tokens.token_hash prüfen
|
||||
* (SHA-256, der Klartext wird nie gespeichert) und den zugehörigen aktiven User zurückgeben.
|
||||
@@ -20,7 +45,7 @@ function ai_backend_db(array $config): PDO
|
||||
*/
|
||||
function ai_backend_authenticate(PDO $pdo): array
|
||||
{
|
||||
$header = $_SERVER['HTTP_AUTHORIZATION'] ?? '';
|
||||
$header = ai_backend_authorization_header();
|
||||
if (!preg_match('/^Bearer\s+(.+)$/i', $header, $m)) {
|
||||
ai_backend_fail(401, 'Kein gültiges Token übermittelt.');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user