< T3Connector - wersja alpha 0.1
13.08.2010 11:57
Napisał: Dawid Pacholczyk

O logowaniu słów kilka

Czy nie zastanawiało Was nigdy w jaki sposób zalogować użytkownika ? Zrobić autologowanie ? Otóż spotkałem się ostatnio z dość nietypową sytuacją. Musiałem zalogować użytkownika w momencie jego rejestracji, a więc kilka słów o tym.


O bezpieczeństwie słów kilka

 

Na wstępie zacznę od tego dlaczego nie powinno się tego robić. Aktualnie ponad 60% maili w sieci to spam, do tego niezliczona ilość botów i robotów, które stają się coraz wymyślniejsze i potrafią obchodzić coraz to bardziej wyrafinowane zabezpieczenia. Tu właśnie zaczynają się schody. Załóżmy, że strona posiada 1000 rejestracji dziennie z czego 10% to boty. Daje nam to 100 zalogowanych pseudoużytkowników. Wygląda kiepsko. Dlatego – moim zdaniem – element taki możemy zastosować tylko wtedy, gdy mamy 100% pewności, że boty nie mają tam wstępu: przykładem może być intranet lub rejestracja wymagająca weryfikacji.

 

Działanie

 

Samo działanie takiego autologowania jest stosunkowo proste. Musimy posłużyć się gotowcem:

$loginData=array(

    'uname' => 'johndoe', // login

    'uident'=> 'mypassword', // hasło

    'status' => 'login'

);

$GLOBALS['TSFE']->fe_user-checkPid=0; // nie ustawiamy konkretnego pid

$info= $GLOBALS['TSFE']->fe_user->getAuthInfoArray();

$user=$GLOBALS['TSFE']->fe_user->fetchUserRecord(

   $info['db_user'],$loginData['uname']);

$ok=$GLOBALS['TSFE']->fe_user->compareUident($user,$loginData);

if($ok) {

  // poprawne zalogowanie

  $GLOBALS['TSFE']->fe_user->createUserSession($user);

} else {

  // obsługa błędnego logowania

  $this->error();

}

 

To sztampowy kawałek kodu. Teraz zróbmy z niego użytek:

$postvars = $GLOBALS[‘_POST’];

$loginData=array(

    'uname' => $postvars[‘userlogin’], // login

    'uident'=> $postvars[‘password’], // hasło

    'status' => 'login'

);

 

Niby tak nie wiele, a jednak. Już w ten prosty sposób możemy przechwycić dane i zalogować użytkownika. Oczywiście ten fragment kodu musi po procesie rejestracji. Jeżeli damy go przed to dane pobrane z post`a nigdy nie będę sprawdzone poprawnie bo w rzeczywistości takiego użytkownika jeszcze nie będzie w bazie.

Ciekawostka

 

Do samego procesu zalogowania możemy posłużyć się wbudowanym mechanizmem TYPO3 i po prostu wygenerować odpowiedni link:

http://www.przyklad.com/index.php?id=1&logintype=login&user={login}&pass={password}&pid={pid}

co tu widzimy:

è id=1 – id strony

è logintype=login – typ procesu. W tym wypadku zalogowanie

è user={login} – nazwa użytkownika

è pass={password} – przypisane mu hasło

è pid={pid} – id strony zawierającej dane o użytkownikach

 

Jak tego użyć ? W bardzo prosty sposób

$postvars = $GLOBALS[‘_POST’];

$user = $postvars[‘user’];

$password = $postvars[‘password’];

$this->register() // proces rejestracji

Header(„Location: http://www.przyklad.com/index.php?id=1&logintype=login&user=$login&pass=$password”);

 

W ten prosty sposób pobierzmy dane z posta, zarejestrujemy użytkownika przekserujemy go gdzie chcemy i go zalogujemy.

 

Uwagi

 

Na koniec chciałbym zaznaczyć, że wszystkie mechanizmy tu opisane możemy bez problemów wykorzystać do własnego rozszerzenia logującego użytkownika. Jednak chciałem pokazać bardziej kompleksowy przykład.


« Luty - 2012 »
PoWtśrCzPiSoNi
 0102030405
070809101112
13141516171819
20212223242526
272829