Aktivace registrace přes email

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

Zdravím.
Dělám jednoduché forum do kterého se budou uživatelé registrovat. Abych alespoň částečně při žhavých tématech eliminoval fake uživatele, chtěl bych při registraci udělat aktivaci účtu přes email.
Na zaregistrovaný email odešlu informace o registraci a odkaz, na který by se muselo kliknout. Tím by se registrace aktivovala a k účetu by se šlo přihlásit.
Neřešil už to někdo? Jak na to v Nette?

Děkuji za nápady

Šaman
Člen | 2666
+
0
-

Řešil jsem už dávno, tak jen obecný postup. Nette to neřeší, ale ulehčuje veškerou rutinu.

  1. Při registraci se uživatel založí jako neaktivní (stačí sloupec v db a upravit přihlašování aby neaktivního nepřihlásil). A během registrace si taky vygeneruješ hash.
  2. Pošleš uživateli email (viz dokumentace, je to snadné) ve kterém bude odkaz na signál viz. další bod. A v url bude i parametr hash.
  3. Vytvoříš si na vhodném presenteru handleActivate($hash). Ten najde v databázi uživatele podle toho hashe a aktivuje jej (změní activate na TRUE) a asi by bylo vhodné i smazat hash.
motorcb
Člen | 552
+
0
-

Šaman:
Super, díky za skvělé vysvětlení :)
Jen nevím jak vytvořím odkaz do emailu pro handle…

V presenteru UserPresenter mam handleActivate($hash, $id) který provede aktivaci ale jak sestrojit odkaz do emailu, který zavolá tento handle???

Díky

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Obávám se, že to nejde. V takovémto případě je nejvhodnější použít actionActivate, které rovnou přesměruje. Do šablony, podle které bude sestaven email (setHtmlBody($template)), je třeba si předat proměnnou $_control, což by měla být instance presenteru.

Šaman
Člen | 2666
+
0
-

Ano, actionActivate($hash) bude asi lepší, já myslím, že jsem to dělal přes handle který jsem měl v BasePresenteru, nebo nějaká podobná prasárna.

Nastuduj si Samostatné šablony a Snažší vytváření šablon. Pak v té šabloně uděláš odkaz naprosto stejně, jako v běžné šabloně pohledu.