Autentisering
Jag har helt kört fast och skulle bli väldigt tacksam för tips… :)
Jag tänkte ha en adminsida på en webbplats jag byggt, som kräver inloggning med hjälp av en autentiserings-promt och en databastabell. Jag har gjort detta förut och då har det funkat…
Den här gången utgick jag från instruktionerna i boken Beginning with PHP and MySQL och fick följande kod:
function authenticate_user() {
header('WWW-Authenticate: Basic realm="Authentication"');
header("HTTP/1.0 401 Unauthorized");
exit;
}
if (! isset($_SERVER['PHP_AUTH_USER'])) {
authenticate_user();
} else {
mysql_pconnect("**censur**","**censur**","**censur**")
or die("Can't connect to database server!");
mysql_select_db("hotellcarlxii_s")
or die("Can't select database!");
$query = "SELECT username, pswd FROM logins
WHERE username ='$_SERVER[PHP_AUTH_USER]' AND
pswd=MD5('$_SERVER[PHP_AUTH_PW]')";
$result = mysql_query($query);
if (mysql_num_rows($result) == 0) {
authenticate_user();
} else {
echo "Welcome to the secret archive!";
}
}
?>
Det som sedan händer när jag försöker logga in på sidan är att autentiserings-promten dyker upp igen med meddelandet att jag angett fel användarnamn eller lösenord (vilket jag inte har!).
Vad skulle kunna vara fel??
//Linnea
Välkommen att titta in på min blogg!
Jag tog bort lösenorden till databasen och ersatte med : **censur** i din kod. Kanske inte var dina inloggningsuppgifter men för säkerhets skull ;)
Har du stoppat in md5-hashet av ditt lösenord i databasen?
Hur gjorde du det hashet?
Haha, OJ!! Tack!!! Går in och byter lösenord med en gång, för säkerhets skull.
Jag lade in lösenordet i databasen genom att skriva md5('lösenordet') så att det krypterades till en lång sträng av siffror och bokstäver.
//Linnea
Välkommen att titta in på min blogg!
Samma problem uppstår med denna hårdkodade autentiseringskod:
if (($_SERVER['PHP_AUTH_USER'] != 'admin') ||
($_SERVER['PHP_AUTH_PW'] != 'password')) {
header('WWW-Authenticate: Basic realm="Authentication"');
header("HTTP/1.0 401 Unauthorized");
print('You must provide…');
exit;
}
?>
Så det verkar inte ha något med databasen/MySQL-koden att göra i alla fall…
//Linnea
Välkommen att titta in på min blogg!
Har du testat att skriva ut vad $_SERVER[PHP_AUT_USER] och $_SERVER[PHP_AUT_PW] är för något?
De kanske är tomma? I så fall är problemet tidigare:
Testa så här:
if (($_SERVER['PHP_AUTH_USER'] != 'admin') ||
($_SERVER['PHP_AUTH_PW'] != 'password')) {
var_dump($_SERVER['PHP_AUTH_USER']);
var_dump($_SERVER['PHP_AUTH_PW']);
//header('WWW-Authenticate: Basic realm="Authentication"');
//header("HTTP/1.0 401 Unauthorized");
//print('You must provide…');
exit;
}
?>
Då får du se vad servern tror du har skrivit