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:
#ext_localconf.php t3lib_extMgm::addService($_EXTKEY, 'auth' /* sv type */, 'tx_customsignon_sv1' /* sv key */, 'description' => 'Allow email as username', 'subtype' => 'getUserFE,authUserFE', 'available' => TRUE, 'priority' => 50, 'quality' => 50, 'os' => '', 'exec' => '', 'classFile' => t3lib_extMgm::extPath($_EXTKEY).'sv1/class.tx_customsignon_sv1.php', 'className' => 'tx_customsignon_sv1', ) );
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.
#class.tx_customsignon_sv1.php function getUser() { $user = false; if ($this->login['status']=='login' AND $this->login['uident']) { $login = $this->login['uname']; $login = $GLOBALS['TYPO3_DB']->quoteStr($login, "fe_users"); $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); } return $user; }
Następnie funkcja authUser wykonuje proces autoryzacji
#class.tx_customsignon_sv1.php function authUser($user) { $OK = 100; if ($this->login['uident'] && $this->login['uname']) { // Checking password match for user: $OK = $this->compareUident($user, $this->login); // Checking the domain (lockToDomain) if ($OK && $user['lockToDomain'] && $user['lockToDomain']!=$this->authInfo['HTTP_HOST']) { $OK = false; } } return $OK; }
Pliki do pobrania:

Ostatnie komentarze
Daniel
I get a fatal error with this extension: Fatal error: Call to undefined method t3lib_div::makeInsta... / 07 maj. 20:53
Zaawansowana subskrypcja, nasze nowe rozszerzenie
Michael
The correct Amazon S3 API TER link is http://typo3.org/extensions/repository/view/amazon-s3-api T... / 24 kwi. 11:44
s3example - TYPO3 i Amazon S3
Adi
Pod nową wersją t3 z gałęzi 4.5.14 (gdzie w korze znalazły się jakieś krytyczne luki) wtyczka też ni... / 02 kwi. 19:52
Zaawansowana subskrypcja, nasze nowe rozszerzenie
Rafał Brzeski
Nasze niedopatrzenie, w nowej wersji dodamy opcję wyboru tej opcji. / 21 mar. 20:22
Zaawansowana subskrypcja, nasze nowe rozszerzenie
bocianos
Wszystko super tylko jak zrobic aby nowe adresy domyslnie miały zaznaczone otrzymywani maili w forma... / 20 mar. 13:08
Zaawansowana subskrypcja, nasze nowe rozszerzenie