Verifikacia emailu po registracii

Br0visT
Člen | 17
+
0
-

Zdravím, som v Nette nový, neexistuje nejaký projekt z ktorého by som mohol skopírovať jednoduchý emailový verifikátor? Resp. uživateľ sa zaregistruje, na email mu príde verifikačný link, ktorý keď otvorí, prepíše sa mu v tabuľke stlpec email_verified na 1 a už sa môže prihlásiť.
Díky

Editoval Br0visT (30. 8. 2020 15:54)

dakur
Člen | 493
+
+8
-

@Br0visT Ahoj, o ničem nevím, ale budou na to stačit dva presentery – jeden pro registraci, druhý pro ověření.

class RegistrationPresenter
{
  public function actionDefault(): void
  {}

  public function renderDefault(): void
  {}

  public function createComponentRegistrationForm(): Form
  {
    // vytvoříš formulář pro registraci
    $form = new Form();
    // ...
    $form->onSuccess[] = [$this, 'registrationFormSucceeded'];
    return $form;
  }

  public function registrationFormSucceeded(): void
  {
    // v on success metodě uložíš uživatele do DB, sloupec email_verified nastavíš na 0
    // taky generuješ token, který si uložíš do DB do dalšího sloupečku a pošleš jej v rámci odkazu na Activation:default v e-mailu
    $token = \Nette\Utils\Random::generate(10);
    $link = $this->link('Activation:default', ['token' => $token]);
    // ...
  }
}

class ActivationPresenter
{
  public function actionDefault(string $token): void
  {
    // ověříš, že token existuje a updatneš sloupce v DB (email_verified na 1, token smažeš)
    // pak přesměruješ uživatele třeba na hlavní stránku pro přihlášené
  }
}

Nezapomeň taky při loginu kontrolovat, že email_verified už je 1.

Editoval dakur (31. 8. 2020 10:10)

Pavel Kravčík
Člen | 1180
+
0
-

@dakur: Moc hezký příspěvek! Přehledné, logické, anti-copy-paste. :)

dakur
Člen | 493
+
0
-

🙂

Br0visT
Člen | 17
+
0
-

A ktorá classa má tú funkciu link? Nejak to neviem nájsť. Každopádne to mám spravené, že v presenteri sa len volá funkcia v service. Takže generovanie linku a posielanie emailu bude prebiehať už rovno tam, nie v presenteri.

jiri.pudil
Nette Blogger | 1028
+
+1
-

Takže generovanie linku a posielanie emailu bude prebiehať už rovno tam, nie v presenteri.

V tom případě tě zajímá LinkGenerator

Br0visT
Člen | 17
+
0
-

Díky, no zároveň mám ďalšiu otázku… Momentálne som si implementoval Message a Mailer z Nette\Mail…
pričom Mailer som pridal cez DI, no Message mi nešlo, takže som len vytvoril novú inštanciu triedy cez new.
Podľa čoho to rozoznávam, kedy pridať triedu cez DI a kedy cez new?

Šaman
Člen | 2634
+
+1
-

Mailer je služba. Potřebuješ právě jeden mailer/databázi/memcache (pokud netypicky více, tak je to stále konkrétní počet a na každou si můžeš ukázat – tenhle SMTP mailer, pak druhý testovací dump Mailer)

Zatímco Message je datový objekt. Není to služba, je to něco co dynamicky vzniklo v aplikaci jako data. Stejně jako třeba new DateTime(). Tyhle objekty většinou nemají žádné dalši závislosti ani konfiguraci.

Pokud bys potřeboval vytvářet všechny Message, DateTime, nebo třeba Form na jednom místě, tak si uděláš továrnu, která vytvoři nový objekt a nějak ho nastaví. Já to dělám pro formuláře. Pak tahle továrna (např FormFactory) je službou a získáš ji přes DI. Ale formuláře, které vytváří budou opět mimo DI.


Ještě jednou a zjednodušeně:
Mailer potřebuješ jeden pro odeslání mnoha zpráv. Je to služba. Kromě toho má vlastní závislosti a DI je za nás vyřeší.

Message potřebuješ novou instanci pro každou odeslanou zprávu. Není to služba, nejde před DI.

Editoval Šaman (31. 8. 2020 22:42)

Br0visT
Člen | 17
+
0
-

Šaman napsal(a):

Mailer je služba. Potřebuješ právě jeden mailer/databázi/memcache (pokud netypicky více, tak je to stále konkrétní počet a na každou si můžeš ukázat – tenhle SMTP mailer, pak druhý testovací dump Mailer)

Zatímco Message je datový objekt. Není to služba, je to něco co dynamicky vzniklo v aplikaci jako data. Stejně jako třeba new DateTime(). Tyhle objekty většinou nemají žádné dalši závislosti ani konfiguraci.

Pokud bys potřeboval vytvářet všechny Message, DateTime, nebo třeba Form na jednom místě, tak si uděláš továrnu, která vytvoři nový objekt a nějak ho nastaví. Já to dělám pro formuláře. Pak tahle továrna (např FormFactory) je službou a získáš ji přes DI. Ale formuláře, které vytváří budou opět mimo DI.


Ještě jednou a zjednodušeně:
Mailer potřebuješ jeden pro odeslání mnoha zpráv. Je to služba. Kromě toho má vlastní závislosti a DI je za nás vyřeší.

Message potřebuješ novou instanci pro každou odeslanou zprávu. Není to služba, nejde před DI.

Chápem, ďakujem. Asi tú dokumentáciu na stránke moc nečítam no :D Škoda, že nie je žiadny video-kurz na Nette, to by fakt bodlo a pomohlo zároveň presadiť Nette medzi mladých a neskúsených ako ja. Vďaka za vysvetlenie, Grudl by si mohol zaplatiť ľudí ako ty, aby sa ten kurz naozaj natočil, to by bola pecka! :D

Šaman
Člen | 2634
+
0
-

Tak zas od toho je tu fórum. Spoustu věcí jsem se naučil i na Posledních sobotách, případně z nich videa někde jsou.
A jinak tohle není Nette specifické. Řešení závislostí DI kontejnerem je samostatná problematika o které se dá dočíst. Nette ji jen používá.

David Grudl
Nette Core | 8110
+
+4
-

Co bys byl za ten kurz ochotný zaplatit?

dakur
Člen | 493
+
0
-

David Grudl napsal(a):

Co bys byl za ten kurz ochotný zaplatit?

Já bych třeba čekal, že taková videa budou přímo v dokumentaci. 🙂 Už mě víckrát napadlo, že to tam chybí. Já vím, že peníze. Ale bavíme-li se o tom, aby framework byl snadno uchopitelný pro začátečníky bez valných programátorských zkušeností, pak právě tato videa by je měla nenápadně do principů programování (a navíc v kontextu Nette) zasvětit. Text je na to moc ukecanej. Ale začátečníci ti za to asi nezaplatí. 🙂 (Just my opinion.)

Editoval dakur (2. 9. 2020 14:30)

Václav Kraus
Člen | 77
+
0
-

dakur napsal(a):

David Grudl napsal(a):

Co bys byl za ten kurz ochotný zaplatit?

Já bych třeba čekal, že taková videa budou přímo v dokumentaci. 🙂 Už mě víckrát napadlo, že to tam chybí. Já vím, že peníze. Ale bavíme-li se o tom, aby framework byl snadno uchopitelný pro začátečníky bez valných programátorských zkušeností, pak právě tato videa by je měla nenápadně do principů programování (a navíc v kontextu Nette) zasvětit. Text je na to moc ukecanej. Ale začátečníci ti za to asi nezaplatí. 🙂 (Just my opinion.)

Video stárne s každou verzí frameworku. A upravuje je výrazně hůř než text. Mě by se líbil koncept Laracastu. Jen tady je na to asi malá cílovka.

Opravdu někde mají video jako součást dokumentace? :)

David Grudl
Nette Core | 8110
+
0
-

Je zajímavé, že se za celou dobu nikdo do konceptu videí ala Laracast nepustil. Asi prostě čeští programátoři nemají v sobě dost podnikavosti.

Pavel Kravčík
Člen | 1180
+
0
-

David Grudl napsal(a):

Co bys byl za ten kurz ochotný zaplatit?

Sice je špatně aktualizovaná stránka s partnery, ale dle součtu už jsme dosáhli tohoto bodu:

Pokud bude tento cíl splněn, budeme mít rozpočet na vylepšování webu, dokumentace, můžeme tvořit obsah (články, videa), ze kterého bude mít prospěch celá komunita.

Takže, pokud to bylo v plánu, klidně by se mohlo někomu zaplatit a ideálně nováčci jako @Br0visT by mohli vytipovat oblasti ze kterých by ta videa chtěli. Myslím, že většina nás z fóra už nedokáže odhadnout, co začátečníky pálí nejvíc. :)

David Grudl
Nette Core | 8110
+
-1
-

Toho bodu se bohužel nikdy nedosáhlo. Ale přesto je dokumentace téměř celá přepsaná, web má stovky inovací, ale na videa už nedojde.

Pavel Kravčík
Člen | 1180
+
0
-

Aha, co jsem počítal „bajvoko“, tak mi to vyšlo kolem 220k (počet partnerů x jejich příspěvek). Pointa byla, že budocnost je vždy v nové generaci, tak proč jim nevyjít vstříc.

David Grudl
Nette Core | 8110
+
-2
-

Zkusme to vzít ještě takto: jak bys rozložil, kolik % z tvého příspěvku na Nette půjde na vývoj, kolik na docku a web, a kolik na videa pro novou generaci?

Polki
Člen | 553
+
+1
-

Co vím, tak tutoriály na Nette už se točí. Bohužel nemůžu prozradit víc. Ale jak to bude venku určitě sem dám odkaz.

Pavel Kravčík
Člen | 1180
+
0
-

@DavidGrudl: To je o té pozici, ve které se kdo nachází. Jelikož si juniory zaškolujeme sami a máme nadstavbu, tak ten příspěvek firmy by dávalo smysl věnovat 100% na vývoj. V pozici začátečníka by ten poměr byl jiný hádám, ale to těžko říct.

Br0visT
Člen | 17
+
+2
-

David Grudl napsal(a):

Co bys byl za ten kurz ochotný zaplatit?

Sorry, dlhšie som tu nebol. Čo sa týka peňazí, tak ja ku kurzom pristupujem štýlom, že je to skôr investícia, jak nejaký výdaj. Samozrejme pokiaľ sa jedná o čiastku ktorá nezabolí. Ale tak príklad uvediem napr Udemy, kde som už kúpil 4–5 kurzov, v hodnote 10–20€. Dostal som ± 10 – 15 hodín videí, kde som sa naučil základy a bol som spokojný, že základom frameworku rozumiem a môžem tvoriť už od začiatku trochu kvalitnejší kód. Taktiež čo sa týka obsahu, kurzy sa dajú rozlíšiť aj na Beginner, Intermediate, Advanced, Extras,… atd. Dokonca som si na 2 mesiace platil Symfonycasts, nejak 20€ mesačne a nezruinovalo ma to. Každý je však iný, niekto do toho dá pár eur a niekto sa radšej „trápi“ s dokumentáciou, hľadá kopu vecí na fóre, ktoré by sa ľudia naučili, len čo by pozreli video. Ja si radšej pozriem video, naučím sa základy a štruktúru kódu od niekoho, kto v tom robí 10 rokov, ako na všetko prichádzať sám a vždycky prerábať kostru programu, keď prídem na niečo nové.