Autentizace a vyuziti mysql db

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
TanisCZ
Člen | 80
+
0
-

Zdravím,

Jelikož mi nejde založit téma v sekci Autentizace a autorizace, tak píšu prosbu sem.

Velice se mi libí systém autentizace a autorizace vyvinutý v Nette.
V příkladech je vše pěkně vysvětleno, ale narazil jsem na jeden problém.

Dejme tomu, že mám tabulku, kde mám ulolžené jména a hesla uživatelů.
Pomocí SimpleAuthenticatoru určitě nějak půjde udělat to, abych mohl dostat seznam uživatelů z db a ten pak předat v přihlašovacím formuláři…

Ale jak na to?:/

syky01
Člen | 25
+
0
-

viděl jsi v nové distribuci „akrabat.forms“? Tam autentizace před DB je.

Jod
Člen | 701
+
0
-

A prečo nepoužiješ to čo je v dokumentácii Nette\Permission .

Ja to používam a ide mi to perfektne.

Vysvetlím:

Spravíš si prihlasovací formulár, po odoslaní zavoláš metódu

Environment::getUser()->authenticate(array $credentials)

kde $credential sú meno a heslo ako array(‚username‘ ⇒ ‚jod‘, ‚password‘ ⇒ ‚tazke‘).

Príklad:

<?php
function formSubmitted($form)
{
	try {
		$user = Environment::getUser();
		$user->authenticate($form['username']->getValue(), $form['password']->getValue());
		$user->setExpiration(3600, true, true);
		if(!empty($this->backlink))
			$this->getApplication()->restoreRequest($this->backlink);
		else
			$this->redirect('Presenter:View');


	} catch (AuthenticationException $e) {
		$form->addError('Nesprávne prihlasovacie údaje');
	}
}
?>

Mne to funguje, dúfam, že to pomohlo aj tebe ,)

TanisCZ
Člen | 80
+
0
-

Hmm Environment::getUser()->authenticate(array $credentials) to znamená, že musim mít implementovanou třídu User pomocí dibiTable, tak aby mi vytáhla data z db? Tak nějak je to napsané v příkladu na akrabat.forms.

ViliamKopecky
Nette hipster | 230
+
0
-

TanisCZ napsal(a):

Hmm Environment::getUser()->authenticate(array $credentials) to znamená, že musim mít implementovanou třídu User pomocí dibiTable, tak aby mi vytáhla data z db? Tak nějak je to napsané v příkladu na akrabat.forms.

Ne, nejlepší řešení je napsat si vlastní AuthenticationHandler (inspiraci hledej v SimpleAuthenticatoru), třída, aby měla metodu authenticate($username, $password) a uvnitř se připojíš do DB, zkontroluješ správnost a budto vyhodíš nějakou AuthenticationException, nebo vrátíš nějaký objekt Identity.

Jod
Člen | 701
+
0
-

Šak dobre píše, tak ako to má tu Nette\Permission .

Ja to tiež tak používam

config.ini

service.Nette-Security-IAuthenticator = Users

Users.php

<?php
class Users extends DibiTable implements /*Nette\Security\*/IAuthenticator
{
	public function authenticate(array $credentials) {}
}
?>

Editoval Jod (6. 11. 2008 12:49)

TanisCZ
Člen | 80
+
0
-

Jo jo a pak si ten handler musim nakonfigurovat třebas v config.ini

Už jsem na to přišel, je to ďábelsky jednoduché a přitom promyšlené. Ještě jsem zvědavý na ACL vrstvu :)

Dík za rady :)

Jod
Člen | 701
+
0
-

V acl si len nastav Acl triedu do configu a v konštruktoru si vyskladaj právomoci a ide to =)

TanisCZ
Člen | 80
+
0
-

Hmm až se dostanu trošku z finanční krize, tak nebudu váhat a nějakou tou kačkou přispěju na Nette. Tohle je opravdu velice kvalitní framework :)

romansklenar
Člen | 655
+
0
-

TanisCZ napsal(a):

Hmm Environment::getUser()->authenticate(array $credentials) to znamená, že musim mít implementovanou třídu User pomocí dibiTable, tak aby mi vytáhla data z db? Tak nějak je to napsané v příkladu na akrabat.forms.

Jak říkal @enoice, není třeba mít kvůli autentizačnímu handleru dědit z DibiTable, jako je v dokumentaci: „Třída Users bude autentizační handler, neboli třída Users z příkladu Akrabat z distribuce.
Tu obohatíme o pár řádek kódu: …“
 – bylo to původně myšleno, jako lehké obohacení akrabatu o další feature :)

Autentizační handler může být jakýkoliv tvůj objekt, kterému naimplementuješ rozhraní IAuthenticator, to co bude v metodě authenticate(), např. jestli se bude přihlašovat přes mysql nebo LDAP, je jen na tobě.

TanisCZ
Člen | 80
+
0
-

Super, už jsem to pochopil. Ty role nejsou vůbec špatnej nápad, vůbec jsem netušil, že něco takového půjde do php dostat, zvlášť když role využívají dědění. Paráda… Jenom ještě jeden dotázek pomocí user->isAuthenticated() zjistím, zda je uživatel přihlášený to je mi jasný, ale je tu nějaký možnost, jak zjistit, jestli je přihlášený konkrétní uživatel třebas pepa?

Jod
Člen | 701
+
0
-

Napr.:

Environment::getUser()->getIdentity()->username

Environment::getUser()->getIdentity()->getName()

Záleží na tebe ako vytvoríš identitu

Editoval Jod (6. 11. 2008 16:24)

TanisCZ
Člen | 80
+
0
-

Paráda! Danke :)