Custom Authenticator nelze načíst

Arthedian
Člen | 26
+
0
-

Dobrý den,
Snažím se připojit svůj vlastní authenticator, ale bohužel mi to nejde. Objekt je v app/MyAuthenticator.php

<?php
use Nette\Security as NS;

class MyAuthenticator implements NS\IAuthenticator
{
    public $database;

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

    function authenticate(array $credentials)
    {
        list($username, $password) = $credentials;
        $row = $this->database->table('users')
            ->where('username', $username)->fetch();

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

        if (!NS\Passwords::verify($password, $row->password)) {
            throw new NS\AuthenticationException('Invalid password.');
        }

        return new NS\Identity($row->id, $row->role, ['username' => $row->username]);
    }
}

a config je:

services:
	router: App\RouterFactory::createRouter
	authenticator: app\MyAuthenticator

Kde dělám chybu? Bohužel v oficiálním návodu není kam správně bych to měl dát.
Hlásí to chybu: Class app\MyAuthenticator used in service 'authenticator'

Tyraxor
Člen | 31
+
0
-

Ahoj,

problém asi nebude tak v umístění souboru, jako spíš to že ti tam chybí deklarace namespace.

Šaman
Člen | 2666
+
0
-

Nejsou namespaces case sensitive? Tedy jestli by nepomohlo App\MyAuthenticator.
(Teď z hlavy nevím, velikost písmen už pár let ctím, i když to není nutné.)

Arthedian
Člen | 26
+
0
-

Šaman napsal(a):

Nejsou namespaces case sensitive? Tedy jestli by nepomohlo App\MyAuthenticator.
(Teď z hlavy nevím, velikost písmen už pár let ctím, i když to není nutné.)

Toto jsem již bohužel zkoušel a nepomohlo to.

Tyraxor napsal(a):

Ahoj,

problém asi nebude tak v umístění souboru, jako spíš to že ti tam chybí deklarace namespace.

Co je tím myšleno? v authenticatoru use mám.

Editoval Arthedian (24. 1. 2018 15:07)

Jan Endel
Člen | 1016
+
+1
-

Use ano, ale namespace schází, doplň na začátek souboru:

namespace App;

use Nette\Security as NS;
//....
Tyraxor
Člen | 31
+
+2
-

před use by jsi měl definovat svůj namespace, např: namespace App; viz ukázka:

namespace App;

use Nette\Security as NS;

class MyAuthenticator implements NS\IAuthenticator
{
    public $database;

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

    function authenticate(array $credentials)
    {
       ....
    }
}
Arthedian
Člen | 26
+
0
-

Moc děkuji všem za pomoc. Toto pomohlo.