Vlastní authenticator – připojení

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

Zdravím,

pokouším se vytvořit vlastní authenticator a připojit jej k aplikaci, nicméně laděnka vrací chybu

Class App\Auth\Authenticator used in service 'authenticator' not found or is not instantiable.

Přčemž můj authenticator je v adresáři App\auth\authenticator.php. Kód authenticatoru:
Jedná se o authenticator uvedený v Domumentace:Přihlašování & oprávnění uživatelů.

<?php

namespace App\Auth;

use Nette\Security as NS;

class Authenticator extends Nette\Object implements NS\IAuthenticator
{
    public $database;

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

    function authenticate(array $credentials)
    {
        list($username, $password) = $credentials;

        $row = $this->database->table('user')
            ->where('login', $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);
    }
}

?>

Sekce services v souboru config.neon.

	services:
		authenticator:
			App\Auth\Authenticator\Authenticator

Díky za každou pomoc.

Editoval Bou (25. 10. 2014 10:58)

Aurielle
Člen | 1281
+
0
-

Tipuju, že ti správně nefunguje RobotLoader. Tu třídu to prostě nenajde.

BigCharlie
Člen | 283
+
+1
-

Nemáš tam náhodou překlep? Nemá to být takhle?

services:
    authenticator:
        App\Auth\Authenticator
Bou
Člen | 3
+
0
-

Ano, překlep tam skutečně byl, díky.

Nicméně po editaci dostávám totožnou chybu.

Class App\Auth\Authenticator used in service 'authenticator' not found or is not instantiable.
Bou
Člen | 3
+
0
-

// Po smazání souborů v adresáři temp vypadá, že robotloader třídu načte. Nyní se ale trápím s chybou

Service 'authenticator': Service of type Nette\Database\Context needed by App\Auth\Authenticator::__construct() not found. Did you register it in configuration file?

Editoval Bou (25. 10. 2014 15:29)

James_Scott
Člen | 55
+
+1
-

Authenticator vyžaduje v konstruktoru instanci NTB, kterou mu musíš v configu nastavit – viz dokumentace

David Kudera
Člen | 455
+
0
-

Od toho je autowiring, který předání zařídí sám. Navíc kdyby to byla chyba v tomto, tak chybová hláška by byla jiná

Aurielle
Člen | 1281
+
0
-

A máš v configu skutečně správně nastavenou databázi? (A používáš 2.2? Context se tuším právě v 2.2 přejmenovával)

looky
Člen | 99
+
0
-

@DavidKudera Tady nejde o autowiring, ale o to že služba asi vůbec není zaregistrovaná. Chybová hláška je správně.