Found sections ‚authenticator‘, ‚authorizator‘ in configuration, but corresponding extensions are missing
- cvit84
- Člen | 43
Udělal jsem si Autentifikator a autorizator podle návodu a hlasí mi to. Found sections ‚authenticator‘, ‚authorizator‘ in configuration, but corresponding extensions are missing.
<?php
...\htdocs\task2\vendor\nette\di\src\DI\Compiler.php:137 source Nette\DI\Compiler-> processExtensions ()
...\nette\bootstrap\src\Bootstrap\Configurator.php:267 source Nette\DI\Compiler-> compile ()
inner-code Nette\Configurator-> generateContainer (arguments)
...\task2\vendor\nette\di\src\DI\ContainerLoader.php:111 source call_user_func_array (arguments)
...\task2\vendor\nette\di\src\DI\ContainerLoader.php:76 source Nette\DI\ContainerLoader-> generate (arguments)
...\task2\vendor\nette\di\src\DI\ContainerLoader.php:41 source Nette\DI\ContainerLoader-> loadFile (arguments)
...\nette\bootstrap\src\Bootstrap\Configurator.php:221 source Nette\DI\ContainerLoader-> load (arguments)
C:\xampp\htdocs\task2\app\bootstrap.php:19 source Nette\Configurator-> createContainer ()
9:
10: $configurator->setTempDirectory(__DIR__ . '/../temp');
11:
12: $configurator->createRobotLoader()
13: ->addDirectory(__DIR__)
14: ->register();
15:
16: $configurator->addConfig(__DIR__ . '/config/config.neon');
17: $configurator->addConfig(__DIR__ . '/config/config.local.neon');
18:
19: $container = $configurator->createContainer();
20:
21: return $container;
22:
C:\xampp\htdocs\task2\www\index.php:6 source require (arguments)
?>
Podle mě mam něco blbě v config neon.
- cvit84
- Člen | 43
CZechBoY napsal(a):
Musíš to dát do sekce
services:
services: authenticator: App\MyAuthenticator authorizator: App\MyAuthorizator
Class UserManager used in service ‚authenticator‘ not found or is not instantiable. search►
Source file
Call stack
...\task2\vendor\nette\di\src\DI\ContainerBuilder.php:422 source Nette\DI\ContainerBuilder-> resolveEntityClass (arguments)
...\task2\vendor\nette\di\src\DI\ContainerBuilder.php:316 source Nette\DI\ContainerBuilder-> resolveServiceClass (arguments)
...\htdocs\task2\vendor\nette\di\src\DI\Compiler.php:202 source Nette\DI\ContainerBuilder-> prepareClassList ()
...\htdocs\task2\vendor\nette\di\src\DI\Compiler.php:139 source Nette\DI\Compiler-> generateCode (arguments)
...\nette\bootstrap\src\Bootstrap\Configurator.php:267 source Nette\DI\Compiler-> compile ()
inner-code Nette\Configurator-> generateContainer (arguments)
...\task2\vendor\nette\di\src\DI\ContainerLoader.php:111 source call_user_func_array (arguments)
...\task2\vendor\nette\di\src\DI\ContainerLoader.php:76 source Nette\DI\ContainerLoader-> generate (arguments)
...\task2\vendor\nette\di\src\DI\ContainerLoader.php:41 source Nette\DI\ContainerLoader-> loadFile (arguments)
...\nette\bootstrap\src\Bootstrap\Configurator.php:221 source Nette\DI\ContainerLoader-> load (arguments)
C:\xampp\htdocs\task2\app\bootstrap.php:19 source Nette\Configurator-> createContainer ()
9:
10: $configurator->setTempDirectory(__DIR__ . '/../temp');
11:
12: $configurator->createRobotLoader()
13: ->addDirectory(__DIR__)
14: ->register();
15:
16: $configurator->addConfig(__DIR__ . '/config/config.neon');
17: $configurator->addConfig(__DIR__ . '/config/config.local.neon');
18:
19: $container = $configurator->createContainer();
20:
21: return $container;
22:
C:\xampp\htdocs\task2\www\index.php:6 source require (arguments)
chyba se změnila :(
- cvit84
- Člen | 43
Ja to jedu podle toho tutorialu a prostě nevím co dělám špatně. :( Je fakt že nemám vytvořenou šablonu ze sign.in do stranky projekt. Ale to by mi laděnka řvala že nenašla šablonu a ne tohle.
tady je odkaz na tutorial: "":https://doc.nette.org/…thentication
- Šaman
- Člen | 2666
Ale v tom návodu se nikde o UserManager
nepíše, ne? Možná
na jiných stránkách, ale spíš mám pocit, že používáš autentikátor ze
sandboxu.
Jinak tohle souvisí spíš se základy OOP. Ta DI není žádná magie, možná
ti to tak zprvu připadá, ale kromě automatického dosazení závislostí na
tom není nic zvláštního.
Ty chceš po DI kontejneru vytvořit instanci třídy
App\MyAuthenticator
. Ta ale vyžaduje \UserManager
(nejspíš ji vyžduješ v konstruktoru). No a ta hláška říká, že DI
kontejner nemůže vytvořit instanci \UserManager
, takže ani
nemůže vytvořit authenticator
a tak to celé spadne hned na
začátku. V takovém případě si zkontroluj hlavně namespaces (opravdu ten
UserManager
žádné NS nemá?), dále si zkonstroluj, že o něm
DI kontejner ví (je zapsaný někde v configu v sekci services
)
a případně že je ta třída v přístupné složce (jestli máš všecho v
/app
, nebo /vendor
, tak je to bez problémů).
A když potřebuješ poradit, tak sem neposílej výpis o tom, že nejde
vytvořit kontejner. Pošli sem tvůj config (v něm byla chyba v prvním
dotazu) a dále obě třídy o kterých je zmínka (tedy v tomto případě
App\MyAuthenticator
a UserManager
).
Ale když si zkontroluješ NS a ověříš si, že jsou obě třídy registrované v configu, tak na 90% bude chyba vyřešená.
- cvit84
- Člen | 43
Resource ‚Sign‘ does not exist. search►
22: if (!$this->user->isLoggedIn()) {
23: if ($this->user->getLogoutReason() === User::INACTIVITY) {
24: $this->flashMessage(‚Session timeout, you have been logged out‘);
25: }
26:
27: $this->redirect(‚Project:view‘, array(
28: ‚backlink‘ ⇒ $this->storeRequest()
29: ));
30:
31: } else {
32: if (!$this->user->isAllowed($this->name, $this->action)) {
33: $this->flashMessage(‚Access denied‘);
34: $this->redirect(‚Sign:view‘);
35: }
36: }
Zase problém s tímhle. To tu není nikde postup na autorizaci uživatelů, aby člověk nemohl udělat chybu. :( ách joooooooooooo
- F.Vesely
- Člen | 369
cvit84 napsal(a):
Zase problém s tímhle. To tu není nikde postup na autorizaci uživatelů, aby člověk nemohl udělat chybu. :( ách joooooooooooo
- cvit84
- Člen | 43
F.Vesely napsal(a):
cvit84 napsal(a):
Zase problém s tímhle. To tu není nikde postup na autorizaci uživatelů, aby člověk nemohl udělat chybu. :( ách joooooooooooo
To mam přečtené. Podle mě to mam v ACL nastavené dobře a i dobře zaregistrované ve službách. I ve startupu presenteru kde se ověřuje, zda daný uživatel má podle role do šablony přístup. Prostě by to mělo fungovat. Sign Presenter vytvořený je. A on mi hlasí že není. :(
- F.Vesely
- Člen | 369
Musis si rucne nadefinovat role addRole()
, zdroje
addResource()
a pravidla allow()
nebo
deny()
. Ta chybova hlaska ti rika, ze neexistuje zdroj (Resource)
Sign, ne ze neexistuje Presenter Sign. Ono totiz neni nikde psano, ze Resource
musi byt vzdy Presenter, proto si je musis nadefinovat rucne.
- cvit84
- Člen | 43
F.Vesely napsal(a):
Musis si rucne nadefinovat role
addRole()
, zdrojeaddResource()
a pravidlaallow()
nebodeny()
. Ta chybova hlaska ti rika, ze neexistuje zdroj (Resource) Sign, ne ze neexistuje Presenter Sign. Ono totiz neni nikde psano, ze Resource musi byt vzdy Presenter, proto si je musis nadefinovat rucne.
$acl->addResource(‚SignPresenter‘); Prostě to mám nadefinované a mělo by mi to fungovat.
- Šaman
- Člen | 2666
$this->name
na presenteru vrátí jen jeho jméno. Ne
filename. Stejně jako u redirectu voláš Sign:view
, nikoliv
SignPresenter:actionView
.
Jinak doporučuji si udělat zkratku
pro barDump() a pak si při jakékoliv chybě, která není jasná na první
pohled, nejprve vypsat všechny vstupy a případně výstup funkce, se kterou
je problém. I když v tomto případě by mělo stačit rozklinout na
chybové stránce sekci argumenty a uvidíš, co vstupuje do té funkce, která
vyhodila chybu.
Jinak za sebe nedoporučuji používat validaci na
$presenter->name, $presenter->action
. Znamená to, že
musíš přidat resource nejen pro každý presenter a akci, ale i komponentu.
Tvoje ACL je pak strašně dlouhé a jen těžko se v něm pozná, jaké je
vlastně logické oprávnění.
Lepší je rozdělit si aplikaci právě na ta logická oprávnění (často
stačí jen frontend/backend, jindy třeba podle skupin entit – kdo má
právo na entitu person
, ten má práva i na všechny
související entity (třeba její kontakty, které se spravují na samostatné
stránce)) a při kontrole oprávnění pak používáš např.
person, write
. I u handleDelete
, i u formulářů
jak na osobu, tak na její kontakty apod.
Ale samozřejmě neznám tvoji aplikaci a je i možné, že z nějakého důvodu je vhodné udělat kontrolu práv hloupou a všechno nechat na ACL. Ale většinou je to cesta do ACL pekla.