Adres email jako nazwa użytkownika

Bartosz Aninowski Sobota, 28 Marca 2009 09:40 komentarzy: 2

TAGI:kickstarter, services, TYPO3

Ile nazw użytkowników jesteśmy w stanie zapamiętać?  Używamy coraz więcej serwisów społecznościowych, portali, tworzymy setki profili. Zapominamy często nazwy, które wymyślali podczas zakładania konta.

Czy  można sobie jakoś ułatwić życie?

Możliwości jest na pewno wiele. Na przykład możemy skorzystać z OpenID, choć osobiście mam cały czas wątpliwości czy chciałbym używać tych samych parametrów logowania do wszystkich serwisów, w których aktywnie uczestniczę. W TYPO3 prostym rozwiązaniem może być używanie w nazwie użytkownika wymiennie nicka lub  adresu email. Nick często się zapomina ale adres email zdecydowanie trudniej :)

Logowanie z użyciem nicka jest standardem w każdej wersji TYPO3 a my chcemy mieć możliwość wpisania albo nicka albo adresu email. Poniżej pokaże jak można to łatwo zrobić za pomocą TYPO3 service. 

Czym są Typo3 services?

"TYPO3 services" są zbiorem różnych klas, które mogą być dostępne zarówno we wtyczkach jak i w core TYPO3. Zaprojektowano ja tak, aby można było łatwo je opisywać w celu rozszerzania, ulepszania lub całkowitej zmianie zachowania TYPO3.

W naszym przypadku przyjrzymy się serwisowi autoryzacji oraz rozszerzymy klasę tx_sv_authbase obsługując autoryzacje użytkownika na podstawie  pola "username" lub "email" z tabeli fe_users.

Zaczynamy od stworzenia podstawowej nowej wtyczki w  kickstarterze lub wybrania innej wtyczki, w której chcemy obsługiwać  autoryzacje użytkowników. Kickstarter posiada wbudowaną możliwość utworzenia podstawowej klasy serwisu, ale aby cały proces był bardziej przejrzysty, pominąłem ten krok podczas tworzenia mojej wtyczki custom_signon.

Rejestracja serwisu

Otwieramy plik ext_localconf.php w naszej wtyczce "custom_signon" i dopisujemy poniższy kod:

zaznacz
  1.  
  2. #ext_localconf.php
  3.  t3lib_extMgm::addService($_EXTKEY, 'auth' /* sv type */, 'tx_customsignon_sv1' /* sv key */,
  4.  array( 'title' => 'Allow email as username',
  5.  'description' => 'Allow email as username',
  6.  'subtype' => 'getUserFE,authUserFE',
  7.  'available' => TRUE, 'priority' => 50,
  8.  'quality' => 50, 'os' => '',
  9.  'exec' => '',
  10.  'classFile' => t3lib_extMgm::extPath($_EXTKEY).'sv1/class.tx_customsignon_sv1.php',
  11.  'className' => 'tx_customsignon_sv1',
  12.  ) );

Opis każedgo parametru w tablicy można zobaczyć tu: typo3.org/documentation/document-library/core-documentation/doc_core_services/1.0.1/view/1/4/

Po zarejestorowaniu serwisu możemy przejśc do stworzenia pliku class.tx_customsignon_sv1.php oraz rozszerzeniu klasy tx_sv_auth.

Potrzebne nam bedą dwie funkcje getUser oraz authUser.

Funkcja getUser pobiera z tabeli fe_users użytkownika, który wpisał w polu username swój email albo nickname.

zaznacz
  1.  
  2. #class.tx_customsignon_sv1.php
  3.  function getUser() {
  4.  $user = false;
  5.  if ($this->login['status']=='login' AND $this->login['uident']) {
  6.  $login = $this->login['uname'];
  7.  $login = $GLOBALS['TYPO3_DB']->quoteStr($login, "fe_users");
  8.  $dbres = $GLOBALS['TYPO3_DB']->exec_SELECTquery( '*', 'fe_users', "(email = '$login' OR username = '$login') ".$this->db_user['enable_clause'] ); $user = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($dbres);
  9.  }
  10.  return $user;
  11.  }

Następnie funkcja authUser wykonuje proces autoryzacji

zaznacz
  1.  
  2. #class.tx_customsignon_sv1.php
  3.  function authUser($user) {
  4.  $OK = 100;
  5.  if ($this->login['uident'] && $this->login['uname']) {
  6.  // Checking password match for user:
  7.  $OK = $this->compareUident($user, $this->login);
  8.  // Checking the domain (lockToDomain)
  9.  if ($OK && $user['lockToDomain'] && $user['lockToDomain']!=$this->authInfo['HTTP_HOST']) {
  10.  $OK = false;
  11.  }
  12.  }
  13.  return $OK;
  14.  }

Pliki do pobrania:

blog comments powered by Disqus