webForumDet fria alternativet

Blogga med Zend Framework - Del 9: Zend_Auth

Webbutveckling

0 svar · 3 576 visningar · startad av jme

Medlem sedan maj 20012 237 inlägg
Frågan#1

Zend_Auth är en modul för att identifiera en användare och säkerställa att användaren är den han/hon utsäger sig för att vara. Zend_Auth innehåller flera "adaptrar" som möjliggör autentisering mot olika källor, t.ex:

• databas
• LDAP
• OpenId
• och fler…

Vi har valt att använda databasen som källa och guiden kommer att förklara Zend_Auth ur databasens synvinkel. Mer om Zend_Auth finns att läsa på sidan http://framework.zend.com/manual/en/zend.auth.html.

När vi använder en databas som källa måste vi ange namnet på användartabellen samt fälten för användarnamnet och lösenordet:

$adapter = Zend_Db_Table::getDefaultAdapter();

$authAdapter = new Zend_Auth_Adapter_DbTable($adapter);
$authAdapter->setTableName('users');
$authAdapter->setIdentityColumn('username');
$authAdapter->setCredentialColumn('password');

Sedan måste vi ge adaptern användarnamnet och lösenordet från formulärfältet:
// notera att $_POST används för exemplets skull
$authAdapter->setIdentity($_POST['username]);
$authAdapter->setCredential($_POST['password]);

Nästa steg blir själva autentiseringen:
$auth = Zend_Auth::getInstance();
$result = $auth->authenticate($authAdapter);

if($result->isValid() )
{
	$data = $authAdapter->getResultRowObject(null, 'password'); // vi vill inte lagra lösenordet
	$auth->getStorage()->write($data);
	
	echo "KTHXBYE";
}
else
{
	echo "FAIL";
}	

För att se, om användaren är inloggad:
// i princip samma kod finns att hitta i vår view helper Zend_View_Helper_LoggedIn
$auth = Zend_Auth::getInstance(); 

if($auth->hasIdentity() )
{
	$username = $auth->getStorage()->read()->username;
	
	echo "Welcome $username";
}

Notera att vår blogg inte hanterar lösenord på ett korrekt och säkert sätt. Lösenordet lagras som klartext i databasen. Lösenordet borde hashas och saltas men det får bli en hemläxa!

Autentisering av användaren skall även göras vid varje HTTP-förfrågan och inte bara då vi vill visa alternativ text i vyn. Mer om hur detta görs får ni veta när vi behandlar Zend_Acl.

262 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)