konto usunięte

Temat: Logowanie użytkownika

Witam.

Czytam sobie tutoriala odnośnie Zend_Auth i dotarłem do miejsca gdzie jestem zobligowany du użycia kodu:

$objAuthAdapter = new Zend_Auth_Adapter_DbTable($objDbAdapter, 'users','username',
'password');

I teraz pytanie czy mimo, że mam połączenie z bazą ustanawiane w Bootstrap.php, to tutaj muszę też je definiować? Czy mogę jakoś użyć tego co już jest ustanowione?

Bootstrap:

function _initDBConnection(){
$this->bootstrap('db');
$db = $this->getResource('db');
}
Daniel Kossakowski edytował(a) ten post dnia 29.05.10 o godzinie 08:27

Temat: Logowanie użytkownika

Jeśli musisz już koniecznie tak to:

Boostrap.php

function _initDBConnection(){
$this->bootstrap('db');
$db = $this->getResource('db');
return $db;
}



$objDbAdapter = Zend_Controller_Front::getInstance()->getParam('bootstrap')->getResource('dbconnection');
Krzysztof Korzeniewski edytował(a) ten post dnia 31.05.10 o godzinie 10:37

konto usunięte

Temat: Logowanie użytkownika

Krzysztof Korzeniewski:
Jeśli musisz już koniecznie tak to:

Boostrap.php

function _initDBConnection(){
$this->bootstrap('db');
$db = $this->getResource('db');
return $db;
}


To jest ok...

$objDbAdapter = Zend_Controller_Front::getInstance()->getParam('bootstrap')->getResource('dbconnection');
Krzysztof Korzeniewski edytował(a) ten post dnia 31.05.10 o godzinie 10:37

ale po co pobierać DB przez front controller?

Można prościej:


$dbAdapter = Zend_Db_Table::getDefaultAdapter();
$authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);
Bartosz Ratajczyk

Bartosz Ratajczyk MS SQL Developer

Temat: Logowanie użytkownika

Piotr Lewandowski:
Można prościej:


$dbAdapter = Zend_Db_Table::getDefaultAdapter();
$authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);

Nie używałem jeszcze Zend_Application, może załatwia to już resource, ale wcześniej chyba trzeba jeszcze (po ustanowieniu połączenia z bazą):


Zend_Db_Table::setDefaultAdapter($db);

konto usunięte

Temat: Logowanie użytkownika

Bartosz Ratajczyk:

Nie używałem jeszcze Zend_Application, może załatwia to już resource, ale wcześniej chyba trzeba jeszcze (po ustanowieniu połączenia z bazą):


Zend_Db_Table::setDefaultAdapter($db);

No tak, racja... zdaje się że do wersji 1.8 trzeba to było robić w taki sposób...
Piotr Rybałtowski

Piotr Rybałtowski Programista PHP,
Symfony, Zend
Expressive, Node.js

Temat: Logowanie użytkownika

W Zend_Application i Bootsrap wystarczy ustawić w konfiguracji adapter, user, hasło, serwer i nazwę bazy (ewentualnie ściężkę) i chodzi, nie trzeba nic od siebie dodawać w php.
Piotr Majowicz

Piotr Majowicz Software Engineer

Temat: Logowanie użytkownika

Podsumowując ja to zrobiłem tak:

W bootstrapie ustawiłem sobie adapter db

protected function _initDb()
{ $db_conf = new Zend_Config_Ini('sciezka do pliku conf' . 'database.ini','general');
$db = Zend_Db::factory(
$db_conf->db->adapter,
$db_conf->db->config->toArray() ); $db->query('Set names utf8'); //bo chce mieć fajne utf8
Zend_Db_Table::setDefaultAdapter($db);
}


sam plik database.ini wygląda tak:


[general]

db.adapter = PDO_MYSQL
db.config.host = localhost
db.config.username = nazwa-uzytkownika
db.config.password = moje-haslo
db.config.dbname = nazwa-bazy


a odbierając formularz logowania adapter pobieramy w prosty sposób:
(1 linijka poniżej)



$db = Zend_Db_Table::getDefaultAdapter();
$post = $_POST;
// oczywiście ja tego tak nie robie, bo $post powinno już być zwalidowane
// chodzi o pola login i password które nie mogą być puste

$adapter = new Zend_Auth_Adapter_DbTable(
$db,
'user',
'login',
'password',
'MD5(?) AND active=1'
); //MD5 - nie trzymamy w bazie haseł w zapisanych jawnie
//and dodatkowy warunek, aby się zalogować
//(w tabeli user, kolumna active musi być równa 1)

$adapter->setIdentity($post['login'])->setCredential($post['password']);
$result = $auth->authenticate($adapter);


a potem to już sobie tylko sprawdzamy $result, przez $result->getCode()
sama kontrola zalogowania może wyglądać tak:

if(Zend_Auth::getInstance()->hasIdentity()) {//rób coś}
Piotr Majowicz edytował(a) ten post dnia 07.06.10 o godzinie 13:37
Piotr Majowicz

Piotr Majowicz Software Engineer

Temat: Logowanie użytkownika

zgubiłem nawias przy getInstance, mam nadzieje że więcej błędów nie ma. ok już poprawionePiotr Majowicz edytował(a) ten post dnia 07.06.10 o godzinie 13:38

konto usunięte

Temat: Logowanie użytkownika

Tak też zrobiłem. (narazie bez przekazania danych)

Zend_Loader::loadClass('Zend_Auth');
Zend_Loader::loadClass('Zend_Auth_Adapter_DbTable');
$objDbAdapter = Zend_Db_Table::getDefaultAdapter();
$objAuthAdapter = new Zend_Auth_Adapter_DbTable($objDbAdapter, 'users', 'username', 'password');
$objAuthAdapter->setIdentity($this->_getParam('uname', '-'))->setCredential ($this->_getParam('password'));
$objAuth = Zend_Auth::getInstance();
$objResult = $objAuth->authenticate($objAuthAdapter);
if ($objResult->isValid()) {
$this->_forward('ok');
} else {
$this->_forward('false');
}


Kończy się to błędem:
Message: A credential value was not provided prior to authentication with Zend_Auth_Adapter_DbTable.

O co tym razem chodzi?



Wyślij zaproszenie do