jak z configu číst hodnoty?
- Paradiso
- Člen | 101
Zdravím,
s Nette se zatím seznamuji a zkouším si ACL, nalezl jsem tutoriál, kde se
nastavuje salt ještě v config.ini
chtěl jsem si to zprovoznit v config.neon a tak jsem vytvořil toto:
security:
salt: tadybudesalt
napadlo mne to dolovat takto, ale tak to dostanu pouze v bootstrap
$container->container->params['security']['salt']
potřeboval ten salt zjistit v mém authenticatoru
Nejsem si jistý, že na to jdu dobře:-)
- uestla
- Backer | 799
Osobně bych to řešil dvěma způsoby, a sice konstruktoru Authenticatoru bych předal buď:
- čistě pouze sůl
- nebo celý kontext
Konkrétně:
# čistě sůl
common:
services:
authenticator:
class: MyAuthenticator
arguments: [%security.salt%]
# nebo celý kontext (resp. kontajnér)
common:
services:
authenticator:
class: MyAuthenticator
arguments: [@container]
Pak už by se v závislosti na volbě řešení samozřejmě k soli v konstruktoru přistupovalo příslušným způsobem.
PS: psáno z paty
- hAssassin
- Člen | 293
v prezenteru to ziskas takto:
$salt = $this->context->params['security']['salt'];
v authenticatoru to bude trochu komplikovanejsi, jelikoz ty potrebujes ten salt (nebo jakoukoliv jinou promennou) nejak dostat do tridy. A to nejlip tak, ze ji predas v konstruktoru. Cili (psano z hlavy, snad je to ok):
config.neon
:
...
services:
...
authenticator:
class: \MyAuthenticator
arguments: ["%security.salt%"]
...
security:
salt: tadybudesalt
a pak MyAuthenticator
:
final class MyAuthenticator implements \Nette\Security\IAuthenticator
{
private $salt = NULL;
public function __construct($s)
{
$this->salt = $s;
}
public function authenticate(array $credentials)
{
// tady uz salt muzes pouzivat:
echo $this->salt;
}
}
Finta je v tom ze ty vlastne nic nemusis nikde volat nebo instanciovat, o to se postara samo Nette vcetne predani soli do konstruktoru.
Editoval hAssassin (29. 10. 2011 23:19)
- rumcais1
- Člen | 81
config.neon uz tady to pise Undefined index: security
#
# SECURITY WARNING: it is CRITICAL that this file & directory are NOT accessible directly via a web browser!
#
# If you don't protect this directory from direct web access, anybody will be able to see your passwords.
# https://nette.org/en/security-warning
#
common:
dibi:
driver: mssql2005
host: sqlweb\sqltst
options:
UID = ...
PWD = ...
Database = ...
CharacterSet = UTF-8
#CharacterSet = char
lazy: TRUE
profiler: TRUE
parameters:
php:
date.timezone: Europe/Prague
# zlib.output_compression: yes
nette:
application:
errorPresenter: Error
database:
dsn: 'mysql:host=localhost;dbname=test'
user:
password:
session:
expiration: 14 days
security:
ldap_server: 192.168.4.20
services:
nette.userStorage:
setup:
- setNamespace('zadost')
authenticator:
class: Authenticator
arguments: ["%@security.ldap_server%"]
routerFactory: RouterFactory
router: @routerFactory::createRouter
zadosti:
class: Model\zadostiRepository(@dibi.connection)
ciselniky:
class: Model\ciselnikyRepository(@dibi.connection)
ucastnici:
class: Model\ucastniciRepository(@dibi.connection)
zadostiUcastnici:
class: Model\zadostiUcastniciRepository(@dibi.connection)
ZadostiDalsiUzivatel:
class: Model\ZadostiDalsiUzivatelRepository(@dibi.connection)
DalsiUzivatele:
class: Model\DalsiUzivateleRepository(@dibi.connection)
factories:
production < common:
development < common:
- vvoody
- Člen | 910
Ta adresa nepatrí do nastavenia nette extension, (nette extension žiadne také nastavenie nespracúva) takže:
nette:
security:
ldap_server: 192.168.4.20
presun do sekcie parameters
parameters:
ldap_server: 192.168.4.20
Ďalší problém máš v nastavení argumentov pre authenticator. Zavináčom sa odkazuje na službu, percentami sa odkazuje na parameter. Obe naraz určite nepoužívaj.
services:
authenticator:
class: Authenticator
arguments: [%ldap_server%]