Vrátenie novej identity do usera
- Gavrilo
- Člen | 46
Ahojte,
pracujem na jednom väčšom projekte v nette a natrafil som na celkom pre mňa závažný problém. Vytvoril som si editáciu užívateľa kde si užívateľ dokáže meniť svoje údaje a pod. (aké prekvapenie :D) No však po zmenení údajov sa do DB zapíšu ale neviem ako ich po editácii znova nahrať do triedy user.
Písal som aj na iné fórum kde mi povedali že ho mám odhlásiť s nejakou flashmessage čo v mojom prípade neprichádza do úvahy.
Ďakujem
- h4kuna
- Backer | 740
Musíš mít nějaký objekt, který ti tvoří identitu, ve smyslu jaký hodnoty v ní chceš držet. Nazveme ho IdentityFactory.
Pak máš authenticator který přihlašuje uživatele podle hesla, facebooku, twitteru, mojeId, tokenu z API nebo podle id uživatele. A to je tvůj případ pokud změníš něco v profilu, tak toho človíčka znova přihlaš podle id. Metoda login nad třídou User přijímá instanci IIdentity.
Příklad.
<?php
class Authenticator {
/** @var \Nette\Security\User */
private $user;
/* constructor */
public function loginId($userId)
{
$identity = $this->identityFactory->create($userId);
$this->user->login($identity);
}
}
?>
EDIT: Náš Authenticator v tomto případě neimplementuje IAuthenticator.
Editoval h4kuna (18. 8. 2016 8:23)
- Lukes
- Silver Partner | 68
Gavrilo napsal(a):
Lukes pri editácii užívateľa je práve asi lepšie riešenie nad tebou … Vieš si predstaviť ten kód pri editácii užívateľa s 20 columami ?
Stačí projít cyklem, ale asi by si měl mít potom plnou kontrolu nad tím, co v tom poli máš :-)
foreach($data as $key => $item)
{
$this->user->getIdentity()->$key = $item;
}
Editoval Lukes (18. 8. 2016 9:52)
- newPOPE
- Člen | 648
@Gavrilo ked nad tym moc nechces meditovat na Identity
v
User
sa vykasli a pouzivaj load user udajov z DB podla userID
napr. $this->user->id
(pripadne si tam das nejaky
userProvider). To ti vo vacsine pripadov bude postacovat.
Data v Identity
sa tak ci tak drzia defaultne v SESSION cize to
mozes povazovat za cache. Este je moznost si napisat vlastnu
Identity
tak aby tieto udaje tahala z DB…
Editoval newPOPE (18. 8. 2016 9:55)
- newPOPE
- Člen | 648
@Gavrilo ano to mas pravdu (ja to tak pouzivam tak mi to netuklo). Ako som pisal o vlastnej Identity tu vlastne zrejme nepotrebujes staci napisat si vlastnu UserStorage ktora je injektovana do Usera a vsetko ti bude ficat nadalej.
- Oli
- Člen | 1215
Můžeš se inspirovat tady: https://github.com/…ity-doctrine. Pokud jsem někde něco neměnil, jakože asi neměnil, tak ti to zaručí to, že se to pokaždé zeptá do databáze. A zároveň ti to předá User entitu do $user->getIdentity().
Ty nepoužíváš Doctrine entity, tak by sis asi musel napsat nějakou vlastní entitu… (něco co bude implementovat IIdentity (myslím).
- GEpic
- Člen | 566
Pokud se dají měnit uživatelské údaje (a navíc uživatel může měnit jen svoje) pouze na jednom místě, nemá smysl to cpát kamkoliv jinam a vymýšlet složitosti.
Celou aktualizaci User\Identity bych provedl ve zpracování formuláře a hotovo, jak navrhoval @Lukes, máš to na 3 řádky a máš vystaráno, můžeš přidávat a odebírat sloupce a ten kód stejně bude fungovat.
Nic světabornějšího a rychlejšího stejně nevymyslíš.
Editoval GEpic (19. 8. 2016 6:58)