Pouze tento týden sleva až 80 % na e-learning týkající se C# .NET. Zároveň využij akci až 30 % zdarma při nákupu e-learningu - Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Lava
Člen
Avatar
Lava:23.1.2020 9:48

Neviem ako v modeli odhlásiť užívateľa a znova mu poslať verifikačný mail. Mám robený systém vnútri mojej appky, kde si užívateľ zmení svoj e-mail. Počas registrácie napíše e-mail, na ktorý sa mu odošle verifikačný mail a až do verifikacie je pre neho appka nedostupna. Toto som poriešil cez ten vue auth, čo som vygeneroval cez artisan.
Lenže chcem dať užívateľovi možnosť zmeniť e-mail hocikedy, vnútri mojej appky, ale zároveň zabezpečiť to, aby sa do nej nedostali ľudia, ktorí nemajú verifikovaný e-mail.

Zkusil jsem: Tu je čiastka kódu, čo som skúšal

if(DB::table('users')->where('id', $user_id)->update(['email' => $emails['email'], 'email_verified_at' => NULL])){
                    $user->sendEmailVerificationNotification();
                    $return = 1;
                    // @todo Ohlasiť usera, redirect na login page
                } else {
                    $return = false;
                }

V databáze prepíšem columns tak ako som písal vyššie, toto mi funguje. Teraz tam mám funkciu $user->sendEmailVeri­ficationNotifi­cation(); ktorá ale neodošle nič! K nej som sa dogooglil, netuším, čo tam môže byť zle a prečo to nepošle verifikačný mail. Zrejme tam sú aj nejaké sessions, v ktorých bude starý mail uložený a ja by som to potreboval odoslať na nový mail, každopádne, používam nejaký fakemail (Test mail server tool), ktorý mám pripojený k WAMP-ku a malo by mi email zobraziť bez ohľadu na to, kde ho posielam. Takže e-mail sa neodošle vôbec.
Následne potrebujem odhlásiť užívateľa (Auth::logout) mi nefungovalo, netuším prečo. Vypísalo chybu o tom, že to cez GET nemôže ísť, že to musí ísť cez POST. Len vôbec neviem, ako teda odhlásim užívateľa, aby mi to šlo.
Redirect na /login som sa snažil pomocou redirect('/login'); ale tiež mi to nešlo, zrejme kvoli tomu, že neprešiel ten logout. A možno ak by prešiel logout, tak by to automaticky redirectovalo tak ako chcem, to je otázne.

Všetky tieto veci mám v User Modeli, tú časť o odoslaní verifikačného mailu a odhlásení usera s redirectom by som teoreticky vedel dať aj do controllera, nerobí to problém. Ale myslím, že keď to nejde v modeli, nepojde to ani v controlleri.

Chci docílit: Takže v zásade sa snažím dosiahnuť to, aby keď si user zmení mail, nastali tieto veci:

  1. Zmení sa jeho e-mail v tabuľke users v stlpci "mail" (mám spravené)
  2. Stlpec "email_verified_at" sa zmení hodnotu na NULL (mám spravené)
  3. Userovi sa odošle na nový e-mail verifikačný mail (nefunguje, netuším prečo)
  4. Usera odhlási a presmeruje na login page (on potom po prihlásení vidí len jeden view, kde mu káže verifikovať mail, k ničomu inému nemá prístup, ak verifikuje mail cez link v e-maile, tak potom už mu ide všetko v pohode)
Odpovědět
23.1.2020 9:48
Aspartám, sacharín, to je môj vitamín
Avatar
Lava
Člen
Avatar
Lava:23.1.2020 13:29

Rozmýšľam, či to nebude jednoduchšie urobiť tak, že sa na ten verifikačný mail vykašlem a užívateľ si ho bude musieť vyžiadať pri novom prihlásení. Takže ak by prebehli úspešne tie dva queries, tak by som usera len odhlásil a pri prihlásení by si musel vyžiadať nový mail. Akože nie je to bohviečo, ale je to môj osobnú "startup", takže sa z toho nepokakam, ak sa ten mail neodošle automaticky..

Nahoru Odpovědět
23.1.2020 13:29
Aspartám, sacharín, to je môj vitamín
Avatar
Richard
Inzerent nabídek práce
Avatar
Richard:25.1.2020 21:48

A jak vypadá ta metoda u usera $user->sendEmailVeri­ficationNotifi­cation() ??
když píšeš že ti nic neposílá, tak bych se podíval na tuto metodu.
A pak ještě bych ověřil ten systém odesílání emailů. Zda skutečně běží a odesílá maily správně.

Nahoru Odpovědět
25.1.2020 21:48
Udělej to teď - možná nebudeš mít už čas to udělat později
Avatar
Lava
Člen
Avatar
Lava:25.1.2020 23:03

Ano. Pokial dam email odoslat az po odhlaseni a opatovnom prihlaseni, tak mi pride. Ta funkcia je vstavana funkcia laravelu, neni to moje. Netusim preco nefunguje

Nahoru Odpovědět
25.1.2020 23:03
Aspartám, sacharín, to je môj vitamín
Avatar
Jan Lupčík
Supertvůrce
Avatar
Odpovídá na Lava
Jan Lupčík:26.1.2020 11:08

Ahoj, jak máš tvořenou registraci? Upravoval jsi ji? Nebo používáš základní? A v ní ti to funguje?
Implementuje ti jinak model uživatele rozhraní MustVerifyEmail? Model by měl vypadat nějak následovně:

class User extends Authenticatable implements MustVerifyEmail
{
    // ...
}
Nahoru Odpovědět
26.1.2020 11:08
TruckersMP vývojář
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Lava
Člen
Avatar
Lava:26.1.2020 22:00

Model vyzera presne tak, ako si napisal. Cele som to vygeneroval cez to vue pomocou konzoly... v minulosti sa použival php artisan make:auth, v 6ke to zmenili na dajaky vue, je mi to jedno, lebo všetko fungovalo ako malo, avšak potreboval som tam zrobiť nejaké svoje veci (overenie účtu od admina a pod.).
No ale to, že pri zmene e-mailu sa nedá len tak ľahko odoslať opäť verifikačný mail, tak to ma laravel sklamal. Myslím, že je to častá funkcionalita, kedy appka vyžaduje od užívateľov, aby mali funkčný mail

Nahoru Odpovědět
26.1.2020 22:00
Aspartám, sacharín, to je môj vitamín
Avatar
Lava
Člen
Avatar
Lava:26.1.2020 22:04

Všetko ostatné, vstavané v laraveli funguje správne. Po registrácií usera odošle verifikačný mail a dá sa to potvrdiť. Ale keď odošlem verifikačný mail pomocou mojho modelu, až vtedy to nejde.

A to ani nehovorím o tom, že mi nefunguje odhlásenie usera, chcel som to urobiť tak, že po zmene e-mailu usera odhlási a redirectuje na login page. Zároveň mu odošle verifikačný mail, ktorým by verifikoval mail a mohol sa prihlásiť do appky.

Keď kód dojde na Auth::logout vyhodí mi dajake exceptions, že nevie nejaká moja funkcia vrátiť value, lebo do query posiela ID = null (zato, že som odhlásený). Lenže v skutočnosti by už vôbec nemala nastať táto situácie, po odhlásení by malo človeka hodiť na login page, kde sa tieto veci vôbec neriešia. No cele zle proste. :-/

Nahoru Odpovědět
26.1.2020 22:04
Aspartám, sacharín, to je môj vitamín
Avatar
Jan Lupčík
Supertvůrce
Avatar
Odpovídá na Lava
Jan Lupčík:26.1.2020 23:11

Laravel ke svému odeslání ověřovacího emailu používá přesně stejnou metodu, jako jsi ukazoval ty výše. Z tohoto důvodu mám podezření, že je něco špatně s mail serverem na tvé straně. Popřípadě se zkus podívat do logu, jestli neobsahuje nějaký error/warning (storage/logs).
A Vue jsi taky nemusel používat. Stačilo se podívat na dokumentaci, kdy si můžeš nechat vygenerovat jenom pohledy stejně, jako to šlo předtím ;)

Neposlal jsi, o jakou exception se jedná, ani její chybu, či callstack. Každopádně Auth::logout() nepřijímá žádný parametr.
Teď taky jde o to, jak chceš přesměrovávat uživatele. V kontroleru ti stačí vrátit RedirectResponse přes helper funkci route(), což v tvém případě s $return = 1; zrovna nevypadá tak, jak by mělo.

Nahoru Odpovědět
26.1.2020 23:11
TruckersMP vývojář
Avatar
Lava
Člen
Avatar
Lava:27.1.2020 6:58

Lebo ja tam robim returny podľa toho, či sa v modeli vyskytne chyba. Ak prejde všetko OK, return 1. Ak zadáš zlý pôvodny mail return 2. Ak zadáš dvakrát nový e-mail a maily sa nezhodujú, return 3.

Nahoru Odpovědět
27.1.2020 6:58
Aspartám, sacharín, to je môj vitamín
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.