Chyba při přihlašování na externím serveru
- ike
- Člen | 14
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
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ů