Najnowsze wpisy

Zaawansowana subskrypcja, nasze nowe rozszerzenie

W repozytorium CMS TYPO3 jest już kilka pluginów za pomocą których można...
09 styczeń 2012

Convenient In/Out animation using expressions

We recently had an opportunity to make a set of instructional animations...
07 listopad 2011

Wdrożenie Sphinx Search

W ostatnim czasie potrzebowaliśmy wydajnego i rozbudowanego mechanizmu...
26 lipiec 2011

Tagi

Adres email jako nazwa użytkownika

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:

Gravatar: din din, 13.12.2009 15:20
статья воспринилась не однозначно.С одной стороны подчерпнул что то новенькое,хотя очень мало.С другой стороны такое чувство что это уже было.Я не хочу обидеть автора,но немножко критики ещё не кому не повредило
Gravatar: enobe enobe, 10.02.2010 14:10
Great. You should publish it in TER.
Here is how to use this fix in conjunction with extension "sr_feuser_register" and its setting: ''useEmailAsUsername", while it should be possible for frontend-users to change theirs email at any time:

1. download the extension "custom_signon" from this site (see above) and import via ExtensionManager
2. install this extension via ExtensionManager and follow the instructions (do update)
3. at this time, you can use both (username or email) in the username-input-field to logon your frontend
4. check your typoscript-template-configurations for extension "sr_feuser_register"
- in CREATE mode you would use the typoscript constants setting 'plugin.tx_srfeuserregister_pi1.useEmailAsUsername = 1'
- in EDIT mode you should use the typoscript constants setting 'plugin.tx_srfeuserregister_pi1.useEmailAsUsername = 0'
- now the email-input-field appears in edit-form
- frontendusers can change email, will recieve notifications to the new email and can use this new email next time, they want login

Thanks for this simple solution.
Dodaj swój komentarz:

* Tylko oznaczone pola są wymagane