Klasa - autoryzacja 2007-01-02

Dzisiaj postanowiłem przedstawić prostą klasę wymuszającą logowanie, która chroni nasze zasoby.

Użycie jest bardzo proste co obrazuje poniższy przykład.

Kod klasy Authenticate:

Do ściągnięcia nowsza, ulepszona klasa, wraz z przykładami - wwwauthenticate.tgz.

PHP, autoryzacja, dostęp, klasa, logowanie, artykuł, blog

Słowa kluczowe: PHP, autoryzacja, dostęp, klasa, logowanie, artykuł, blog

Komentarze i opinie
2007-01-02 22:31

Ciekawe, może potem sprawdzę :P

void
2007-03-28 13:49

Powinno być chyba 'Unauthorized' ?

2007-03-28 13:58

@void: tak, dzięki, już poprawiam

2007-04-26 17:12

Wywala mi Taki blad..

>
Warning: Cannot modify header information - headers already sent by (output started at C:\WarfareServSite\www\authenticate.php:69) in C:\WarfareServSite\www\authenticate.php on line 61

Warning: Cannot modify header information - headers already sent by (output started at C:\WarfareServSite\www\authenticate.php:69) in C:\WarfareServSite\www\authenticate.php on line 62
Authorization Required.

jakies sugestie?

sf
2007-04-26 17:15

Czy umieściłeś skrypt na samym początku strony? Nie możesz najpierw wyświetlić np. <html>, a potem dać ten skrypt, skprypt musi być uruchamiany zanim cokolwiek zostanie wysłane do użytkownika.

2007-12-18 12:10

a mi wywala biała strone...

sf
2007-12-18 12:12

Daj na początku skryptu :

ini_set('display_errors', 1);
ini_set('error_reporting', E_ALL);

To Ci wypisze błędy.

2007-12-18 13:10

"Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /apache/apache-common/virt/virtuals/virt-645341/katalog/auth.php on line 8"

sf
2007-12-18 15:50

Wymagane jest PHP5.

msm
2008-01-22 14:25

A ja wpisuje ten przykladowy login i password, i komp mieli mieli i wywala znow okienko logowania ;/ Mam zainstalowanego Apacha obsluga PHP 5 jest bo juz stronki robilem i wszystko dzialalo. Ogolnie to mam problemy z wszystkimi tego typu "autoryzacjami" bo bralem z innych stron i tak samo byl.... Takze to chyba nie problem kodu a cos u mnie :-) Bylbym wdzieczny za odpowiedz

Tikky
2008-03-02 12:20

A mi wszystko działa pięknie, ale mam pytanko:
Jak zrobić w PHP link z przyciskiem typu: Wyloguj

Z góry dzięki

2008-03-27 19:37

Dopisałem metodę do wylogowania. Wystarczy zrobić prosty warunek:

if(isset($_GET['logout']) && $_GET['logout']) {
$oA->logout();
}

Tikky
2008-06-14 19:33

Dzięki za dopisanie wylogowania.
To jeszcze o jedną rzecz pozwole sobie zapytać.

Załużmy że mam stronę główną i chciałbym umieścić przycisk 'delete' tylko jeśli użytkownik jest zalogowany a jesli nie to nie chce mu pokazywać pola formularza do zalogowania tylko po prostu wyświetlić stronę dalej bez przycisku 'delete'.

Domyślam się, że trzeba by przerobić funkcję failed jakoś.
A może jest jakies prostsze rozwiązanie?

sf
2008-06-14 19:44

Dokonałem zmian. Zamiast check() używaj teraz login(). Natomiast do sprawdzania na stronie czy jest się zalogowanym użyj check().

if($oA->check()) { echo 'delete'; }

2008-06-14 20:08

Nie no tak szybkiej odpowiedzi się nie spodziewałem. Dzięki.

Ja obszedłem problem na okolo dopisując dodatkową funckę która sprawdza w klasie czy jestes zalogowany i zwraca 0 lub 1, ale to tak na około.

Dzięki raz jeszcze, zaraz sprawdze Twoją wersję.

2008-06-14 20:24

Funckcja check() działa pięknie.

Ale wracając do logowania jest jeszcze jeden problem.
Jak wywołujemy funkcję $oA->logout();
pojawia się okienko do wpisania hasła. Fakt jak sie wpisze złe to nastąpi wylogowanie, ale jak np dam canel to nic sie nie dzieje.

Moim skromnym zdaniem powinno być tak, ze na przykład klikasz link wyloguj i tyle, a nie ze wyskakuje Ci okienko do podania hasła i usera.

Nie rozum mnie źle, ja nie narzekam, klasa jest fajna, używam, piszę tylko uwagi coby usprawnić funcję.

sf
2008-06-15 13:58

@Tikky: podczas korzystania z PHP_AUTH_USER nie można wylogować się w inny sposób niż ten, który przedstawiłem. Żeby osiągnąć to co chcesz trzeba by to oprzeć na sesjach.

Umieściłem też trochę nowszą wersję klasy do ściągnięcia.

2009-07-31 19:27

Mój sposobik na szyfrowanie hasła z użyciem tej klasy (sha1):

Dla strony:

$oA = new WWWAuthenticate(array('Nivo' => '3f6d191fdc202e6badd90839aa151116d7e710b7'));

Podajemy hasło zahashowane (pobrane np. z bazy).

Do check(); dodajemy na wstępie:

$ile = strlen($_SERVER['PHP_AUTH_PW']);
if($ile < 40) {
$_SERVER['PHP_AUTH_PW'] = sha1($_SERVER['PHP_AUTH_PW']);
}

W ten sposób nasze hasło przenoszone przez zmienną $_SERVER['PHP_AUTH_PW'] jest szyfrowane, więc jest nieco bezpieczniej. Warunkiem jest, aby pierwotne hasło użytkownika nie było dłuższe niż 39 znaków.

Dzięki stormfly za świetną klasę.

Nowy komentarz
 
 
Projektowanie i tworzenie stron www w PHP5. Opisy i recenzje oprogramowania typu cms, blog, wiki, open source.