Door
Bas van de Ven
op 28-08-2021 19:46
gewijzigd op 28-08-2021 21:40
1.910 views
Nu heb ik toch iets raars. O.b.v. de Bearer code in de authorization header wordt betreffende gebruiker niet meer gevonden. Dit heeft het altijd wel gedaan afgelopen 1,5 jaar. Het volledige php script heb ik recentelijk niet gewijzigd. Zie hieronder het relevante gedeelte uit dit script. Zowel in mijn C# applicatie als in Postman verschijnt de melding : via authorization header wordt de gebruiker niet gevonden. (zie code hieronder). De query blijkt geen resultaat meer te geven. Niet met de variabele $authorization[1] als met een vaste waarde als string. Dit laatste geeft wel een resultaat in mysql. De opbouw van de query klopt dus. Pas als ik de query wijzig in
<?php SELECT lidId FROM tblLeden WHERE readerkey is not null ?>
levert de query een resultaat binnen het php script. Niet het juiste resultaat maar $result is tenminste niet leeg.
Ter volledigheid de string van 64 karakters die in mysql een resultaat geeft heb ik exact gekopieerd en geplakt in Postman.
Ik weet niet meer waar ik het in moet zoeken. Iemand enig idee?
Hierbij de relevante code uit mijn php script
<?php
$headers = getallheaders();
if (!isset($headers['Authorization'])) {
http_response_code(401);
Echo 'authorization header bestaat niet.';
exit;
} else
{
$authorization = explode ( " ", $headers['Authorization'] );
if (count($authorization) == 2 && trim($authorization[0]) == "Bearer" && strlen(trim($authorization[1])) == 64) {
$zoek_lidId = mysqli_query($db, "SELECT lidId FROM tblLeden WHERE readerkey = '" . mysqli_real_escape_string($db,$authorization[1]) . "' ") or die (mysqli_error($db));
$result = mysqli_fetch_array($zoek_lidId);
if($result){
$lidid = $result['lidId'];
} else {
http_response_code(401);
echo 'via authorization header wordt de gebruiker niet gevonden.';
exit;
}
} else {
http_response_code(401);
echo 'authorization header heeft niet de juiste opmaak.';
exit;
}
}
?>
Me de echo krijg ik de query uitgeschreven. Een gewenst resultaat dus. Daarnaast ook nog steeds de melding: via authorization header wordt de gebruiker niet gevonden.
Met een While loop gaat het ook niet goed. Had ik al getest.
Wil de code werken dan moet de readerkey een string zijn (anders volgt een impliciete cast in MySQL), en moet er iets zinnigs staan in de variabele $authorization[1], wat afhangt van $headers, waarvan we hier niet kunnen zien wat er in zit omdat die gevuld zou moeten worden vanuit de webserver.
Je heb checks ingebouwd, waaruit we kunnen afleiden dat de header moet voldoen aan het format:
Authorization: Bearer <string van 64 tekens>
Dit voldoet aan het format zoals aangegeven op MDN.
Een andere afhankelijkheid is wat er in $db staat, het moet een geldige database resource zijn, met dezelfde credentials als die je in postman gebruikt, die op dezelfde manier verbindt (denk aan IP versus socket) en hetzelfde schema in dezelfde database selecteert. De kans bestaat dat je ergens helemaal overheen kijkt, dus helpt debuggen, stap voor stap kijken of alle variabelen de verwachte waarden bevatten. Je kunt ook proberen de query om te schrijven in een prepared statement, het zou niet uit moeten mogen maken maar je weet niet wat je dan nog op gaat vallen.
Een andere tussenstap is nog om te kijken wat de resultaten zijn als je via de CLI de mysql client start, en het daar op probeert, dan heb je al meer een idee waar het aan kan liggen.
De check if($result) geeft false als de query lukt en er geen resultaten zijn, dus misschien kan je ook testen door zelf de waarde van $autorization[1] te vullen met een readerkey waarvan je hebt gecontroleerd dat die in de database bestaat.
Ik ben er achter en het probleem is opgelost. Het script met de connectie naar de database bleek onjuist. Een paar dagen geleden heb ik een backup teruggezet van +100 bestanden om een ander probleem uit te sluiten. Helemaal niet meer gerealiseerd dat het bestand met de connectie naar de database wel eens fout kon zijn. Stom, stom. Ik baal dat ik jullie hiermee heb lastig gevallen en dit forum op deze manier vervuil. Kan deze topic worden verwijderd?
Het is meer dat mensen die zoeken op dit onderwerp hier hun antwoord niet zullen vinden.
Voor mij mag deze topic verder best blijven bestaan.
Bedankt, overigens voor jullie reacties