HTTP authentication met meerdere users
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?PHP
$user = "adminuser";
$pass = "adminpass";
$error = "Sorry, u hebt geen toegang!";
$name = basename ($PHP_SELF);
if ( (!isset($PHP_AUTH_USER)) || ! (($PHP_AUTH_USER == $user) && ( $PHP_AUTH_PW == "$pass" )) ) {
header("WWW-Authenticate: Basic entrer=\"Form2txt admin\"");
header("HTTP/1.0 401 Unauthorized");
echo "$error";
exit;
}
echo "HIER KOMT DE BEVEILIGDE PAGINA ALS JE BENT INGELOGD!"
?>
$user = "adminuser";
$pass = "adminpass";
$error = "Sorry, u hebt geen toegang!";
$name = basename ($PHP_SELF);
if ( (!isset($PHP_AUTH_USER)) || ! (($PHP_AUTH_USER == $user) && ( $PHP_AUTH_PW == "$pass" )) ) {
header("WWW-Authenticate: Basic entrer=\"Form2txt admin\"");
header("HTTP/1.0 401 Unauthorized");
echo "$error";
exit;
}
echo "HIER KOMT DE BEVEILIGDE PAGINA ALS JE BENT INGELOGD!"
?>
meerdere users laten aanmeleden? Dus user 1 met adminuser & adminpass als logingegevens gaat naar admin.html of als het kan een sessie, anders kunnen ze gewoon http://www.nl/admin.html intypen, dan heeft het hele gebeuren geen zin. Dan user2 met user1 en pass1 als gegevens gaat naar user2.html of .php?sessionid=23t42g enz.
Kan dit?
bijvorbeeld deze tabel:
(users noem ik het ff)
id | naam | pass | status
1 | ik | mijnpass |admin
2 | jij | jouwpass |user
dan php query:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<?php
$user = "user";
$password = "pass";
$db = "database";
$link = mysql_connect("localhost", $user, $password);
if (!$link) die ("Er zijn problemen met de server, probeer later opnieuw");
mysql_select_db($db, $link) or die ("Er zijn problemen met de server, probeer later opnieuw");
$error = "Sorry, u hebt geen toegang!";
// gegevens uit db
$sql = "SELECT * FROM users WHERE naam =".$PHP_AUTH_USER;
$geg = mysql_query($sql);
$geg2 = mysql_query($sql);
if(isset($PHP_AUTH_USER)){
// juiste rij uitschrijven
while ($rij = mysql_fetch_array($geg)){
if ( ! (($PHP_AUTH_USER == $row['naam']) && ( $PHP_AUTH_PW == "$row['pass']" )) ) {
header("WWW-Authenticate: Basic entrer=\"Form2txt admin\"");
header("HTTP/1.0 401 Unauthorized");
echo "$error";
exit;
}
}
} else {
header("WWW-Authenticate: Basic entrer=\"Form2txt admin\"");
header("HTTP/1.0 401 Unauthorized");
echo "$error";
exit;
}
// hier komt dus de pagina waar naar waar je de user doorstuurt...
while ($rij = mysql_fetch_array($geg2)){
switch ($row['status']){
case "admin":
header("Location: admin.php");
exit;
break;
case "user":
header("Location: user.php?user=".$row['id']);
exit;
break;
// eventuele andere mogelijkheden
}
}
?>
$user = "user";
$password = "pass";
$db = "database";
$link = mysql_connect("localhost", $user, $password);
if (!$link) die ("Er zijn problemen met de server, probeer later opnieuw");
mysql_select_db($db, $link) or die ("Er zijn problemen met de server, probeer later opnieuw");
$error = "Sorry, u hebt geen toegang!";
// gegevens uit db
$sql = "SELECT * FROM users WHERE naam =".$PHP_AUTH_USER;
$geg = mysql_query($sql);
$geg2 = mysql_query($sql);
if(isset($PHP_AUTH_USER)){
// juiste rij uitschrijven
while ($rij = mysql_fetch_array($geg)){
if ( ! (($PHP_AUTH_USER == $row['naam']) && ( $PHP_AUTH_PW == "$row['pass']" )) ) {
header("WWW-Authenticate: Basic entrer=\"Form2txt admin\"");
header("HTTP/1.0 401 Unauthorized");
echo "$error";
exit;
}
}
} else {
header("WWW-Authenticate: Basic entrer=\"Form2txt admin\"");
header("HTTP/1.0 401 Unauthorized");
echo "$error";
exit;
}
// hier komt dus de pagina waar naar waar je de user doorstuurt...
while ($rij = mysql_fetch_array($geg2)){
switch ($row['status']){
case "admin":
header("Location: admin.php");
exit;
break;
case "user":
header("Location: user.php?user=".$row['id']);
exit;
break;
// eventuele andere mogelijkheden
}
}
?>
ik heb dit niet uitgetest (vlug ff geschreven) dus het kan nog fouten bevatten maar normaal zou het moeten werken
dan zet je op die paginas een lus om te zien of ze de autentiekatie al hebben gedaan, zoniet stuur je ze door naar deze inlog pagina...
edit:
header("WWW-Authenticate: Basic entrer=\"Form2txt admin\"");
wat doet dat juist want een inlogsysteem met auth zie ik ook wel zitten...
moet je voor die regel een speciaal bestand op je server zetten (ik weet wel dat die auth toegelaten is dus dat zal het probleem niet zijn denk ik)
Gewijzigd op 25/06/2004 13:37:00 door de VeeWee
Dus ik maak in MySQL een db aan met USERS, en ik daai het op mijn eigen servertje.
Elwin
.htpass kan je gebruiken maar als je dan een nieuwe gebruiker wilt maken moet je het bestand herchrijven en dit vergt meer moeite dan vlug in een db zetten
aan andor:
jep
id is primary key en auto_increment
de rest is tekst...
--> een vraagje:
header("WWW-Authenticate: Basic entrer=\"Form2txt admin\"");
wat doet dat juist want een inlogsysteem met auth zie ik ook wel zitten...
moet je voor die regel een speciaal bestand op je server zetten (ik weet wel dat die auth toegelaten is dus dat zal het probleem niet zijn denk ik)
edit:
heb ff een foutje gevonden: de laatste switch moet dit zijn:
Code (php)
Gewijzigd op 25/06/2004 13:10:00 door de VeeWee
Hoe maak ik die db in phpMyAdmin?
id int(8) NOT NULL auto_increment,
naam varchar(50) NOT NULL default '',
pass varchar(50) NOT NULL default '',
status varchar(20) NOT NULL default 'user',
PRIMARY KEY (id)
) TYPE=MyISAM;
er staan nog wel wat fouten in het script maar die ga ik er direct eens uithalen :P
Gewijzigd op 25/06/2004 13:38:00 door de VeeWee
Ik wil ook zoiets doen (met die popup met inloggen enzo) maar bij mij werkt het gewoon niet :S!!
Ik krijg wel die popup, dan vul ik 1,1 in (had ik zo ingesteld) maar dan krijg ik hem gewoon opnieuw :S...
Is dit een instellingen bij php of apache?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?PHP
$user = "1";
$pass = "1";
$error = "Sorry, u hebt geen toegang!";
$name = basename ($PHP_SELF);
if ( (!isset($PHP_AUTH_USER)) || ! (($PHP_AUTH_USER == $user) && ( $PHP_AUTH_PW == $pass )) ) {
header("WWW-Authenticate: Basic entrer=\"Form2txt admin\"");
header("HTTP/1.0 401 Unauthorized");
echo "$error";
exit;
}
echo "HIER KOMT DE BEVEILIGDE PAGINA ALS JE BENT INGELOGD!"
?>
$user = "1";
$pass = "1";
$error = "Sorry, u hebt geen toegang!";
$name = basename ($PHP_SELF);
if ( (!isset($PHP_AUTH_USER)) || ! (($PHP_AUTH_USER == $user) && ( $PHP_AUTH_PW == $pass )) ) {
header("WWW-Authenticate: Basic entrer=\"Form2txt admin\"");
header("HTTP/1.0 401 Unauthorized");
echo "$error";
exit;
}
echo "HIER KOMT DE BEVEILIGDE PAGINA ALS JE BENT INGELOGD!"
?>
??
Zal het dalijk (als niemand anders het doet) even herschrijven maar k moet nu weg.
moet
echo "HIER KOMT DE BEVEILIGDE PAGINA ALS JE BENT INGELOGD!";
worden
en waarom staat die basename daar, die variabele word niet gebruikt...
Code (php)
Je maakt er een rotzooi van:
Code (php)
Dat zijn genoeg haakjes.
En die ; die VeeWee al aangaf natuurlijk.
zonder die haakjes dus...
en nog iets wat eigenlijk fout is
--> werk met $_SERVER variabelen
dit word dan
$_SERVER['$PHP_AUTH_USER']
$_SERVER['$PHP_AUTH_PW']
die haakjes is meer javascript style... ik raad je aan van in php ook php codes te gebruiken :p
maar wil iemand mij nu eens een antwoor dgeven op de vorige vraag die ik op deze topic gesteld heb en waarom ze :
entrer
gebruiken --> in de php manual stond er iets anders maar ik begrijp er niet veel van ...
Quote:
die haakjes is meer javascript style... ik raad je aan van in php ook php codes te gebruiken :p
Dat zie je helemaal verkeerd! echo() is, net zoals print(), een functie die met haakjes aangeroepen dient te worden omdat je in die haakjes het argument beho0rt te plaatsen.
Je kunt dit bericht niet wijzigen omdat het gelockt is. Vragen hierover kunnen gesteld worden in dit forum.
Als toevoeging : alle functies dienen met () aangeroepen te worden, of ze nou een argument hebben of niet.
Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in G:\Abyss Web Server\htdocs\02.php on line 26
Code (php)
1
2
3
2
3
<?PHP
if ( ! (($PHP_AUTH_USER == $row['naam']) && ( $PHP_AUTH_PW == "$row['pass']" )) ) {
?>
if ( ! (($PHP_AUTH_USER == $row['naam']) && ( $PHP_AUTH_PW == "$row['pass']" )) ) {
?>
maar dan komt er in IE te staan:
Notice: Undefined variable: PHP_AUTH_USER in G:\Abyss Web Server\htdocs\02.php on line 15
Warning: Cannot modify header information - headers already sent by (output started at G:\Abyss Web Server\htdocs\02.php:15) in G:\Abyss Web Server\htdocs\02.php on line 38
Warning: Cannot modify header information - headers already sent by (output started at G:\Abyss Web Server\htdocs\02.php:15) in G:\Abyss Web Server\htdocs\02.php on line 39
Sorry, u hebt geen toegang!
dusssss......
naar:
Maar dan heb ik dit:
Parse error: parse error, unexpected T_STRING in G:\Abyss Web Server\htdocs\02.php on line 15
Kan je niet gewoon een goed werkend script geven?