Chyba při přihlašování na externím serveru

ike
Člen | 14
+
0
-

Ahoj,
nainstaloval jsem přes composer Nette a napsal přihlašování dle dokumentace „Přihlašování & oprávnění“. Při pokusu o načtení a ověření přihlášení mi to vyhazuje chybu v souboru app/model/MyAuthenticator.php.
Declaration of MyAuthenticator::authenticate(string $username, string $password): Nette\Security\SimpleIdentity must be compatible with Nette\Security\Authenticator::authenticate(string $user, string $password): Nette\Security\IIdentity.

Kód v MyAuthenticator je použitý z dokumentace bez úprav.

use Nette;
use Nette\Security\SimpleIdentity;

class MyAuthenticator implements Nette\Security\Authenticator
{
	private $database;
	private $passwords;

	public function __construct(
		Nette\Database\Explorer $database,
		Nette\Security\Passwords $passwords
	) {
		$this->database = $database;
		$this->passwords = $passwords;
	}

	public function authenticate(string $username, string $password): SimpleIdentity
	{
		$row = $this->database->table('users')
			->where('username', $username)
			->fetch();

		if (!$row) {
			throw new Nette\Security\AuthenticationException('User not found.');
		}

		if (!$this->passwords->verify($password, $row->password)) {
			throw new Nette\Security\AuthenticationException('Invalid password.');
		}

		return new SimpleIdentity(
			$row->id,
			$row->role, // nebo pole více rolí
			['name' => $row->username]
		);
	}
}

Na localhostu to funguje bez problémů. Při překopírování na wedos se zobrazuje uvedená chyba.
Hledám řešení už několik dní, ale neúspěšně.
Můžete mě prosím někdo nakopnout správným směrem?

Marek Bartoš
Nette Blogger | 1280
+
0
-

Jakou verzi php máš na localhostu a na serveru? SimpleIdentity je třída implementující IIdentity a v tvém MyAuthenticator->authenticate() tedy uvádíš přesnější return type, než Nette\Security\Authenticator. To je možné až od php 7.4, viz https://wiki.php.net/…t-parameters

Můžeš tedy buď na serveru použít php 7.4 nebo vyšší (preferovaně) nebo změnit return type z SimpleIdentity na IIdentity, ale narazíš nejspíš na víc podobných problémů

ike
Člen | 14
+
0
-

To bude asi ono. Na lokalu mám 7.4, na wedosu běží 7.3. Díky moc za pomoc.
Edit: vyzkoušeno na jiném hostingu s PHP 7.4 a funguje.

Editoval ike (21. 2. 2021 13:52)