nedaří se rzoběhnout authenticator

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

Zdravím,
mám aplikaci, která běží pod Nette 2.0.12.
Chtěl jsem upgradovat na 2.3.3. Natáhl jsem sandbox a postupně do něj přidávat kódy z 2.0.12. A narazil jsem při použití Authenticatoru (zřejmě nechápu správně namespace). Mám pocit, že jsem už pročetl celé fórum a nejsem moudřejší ani za mák.

config.neon:

<?php
services:
	- App\Model\UserManager
	- App\Model\Authenticator
	- App\Forms\SignFormFactory
	router: App\RouterFactory::createRouter
	authorizator: AccessList
?>

Authenticator.php

<?php

namespace App\Model;

use Nette,
	Nette\Security;


/**
 * Users authenticator.
 */
class Authenticator extends Nette\Object implements Security\IAuthenticator
{
	/** @var Nette\Database\Context */
	private $database;


	public function __construct(Nette\Database\Context $database)
	{
		$this->database = $database;
	}


	/**
	 * Performs an authentication.
	 * @return Nette\Security\Identity
	 * @throws Nette\Security\AuthenticationException
	 */
	public function authenticate(array $credentials)
	{
		list($username, $password) = $credentials;
		$row = $this->database->table('users')->where('username', $username)->fetch();

		if (!$row) {
			throw new Security\AuthenticationException('The username is incorrect.', self::IDENTITY_NOT_FOUND);

		} elseif (!Security\Passwords::verify($password, $row->password)) {
			throw new Security\AuthenticationException('The password is incorrect.', self::INVALID_CREDENTIAL);
		}

		$arr = $row->toArray();
		unset($arr['password']);
		return new Security\Identity($row->id, NULL, $arr);
	}

}
?>

Výsledná hláška je
Service ‚application.10‘: Class App\Presenters\Authenticator does not exist

Víte někdo co dělám špatně? Předem díky za radu.

h4kuna
Backer | 740
+
+2
-

Spíše by pomohla celá laděnka tohle tady máš dobře. To vypadá že injektuješ Authenticator do nějakého presenteru a do anotace jsi nedal celý namespace ale jen část.

Šaman
Člen | 2666
+
0
-

Můžeš ukázat celou aplikaci? Nebo to zkus to na čistém sandboxu a jestli to zreprodukuješ, tak nasdílet ten. Myslím, že chyba bude jinde, než co jsi posílal. Možná si ještě zkus fulltextem vyhledat Authenticator, jestli tam někde nemáš nějakou zapomenutou deklaraci. a rozhodně promaž cache a temp, aby tam nebyla data z minulé aplikace na nižším Nette.

ike
Člen | 14
+
0
-

Díky vám oběma za pomoc, chybu jsem našel.
Byla v authenticatoru:

před

<?php
class Authenticator extends Nette\Object implements Security\IAuthenticator
?>

po

<?php
class Authenticator extends \Nette\Object implements Security\IAuthenticator
?>

Zrada byla v lomítku před Nette, aplikace hledala Object v App\Model\Nette\Object.

Ještě jednou díky za pomocnou ruku.

Šaman
Člen | 2666
+
0
-

To je zvláštní, tímhle by to být nemělo. Máš Nette v sekci use, takže před Nette už nemusíš dávat lomítka (viz např. ty Nette\Database\… bez lomítka).

Editoval Šaman (18. 6. 2015 22:10)