Home > TYPO3 > Adres email jako nazwa użytkownika

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:

ext_localconf.php 

t3lib_extMgm::addService($_EXTKEY,  'auth' /* sv type */,  'tx_customsignon_sv1' /* sv key */,
		array(
			'title' => 'Allow email as username',
			'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: http://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:

  • Share/Save/Bookmark

Bartosz Aninowski TYPO3 kickstarter, services, TYPO3

  1. luty 10th, 2010 at 14:10 | #1

    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.

  1. Brak jeszcze trackbacków