Overenie Tokenu zaslaného na email bez DB
- SontoEremo
- Člen | 341
Zdravím,
Mám SignPresenter na registráciu, prihlasovanie … a zaslanie zabudnutého
hesla v ktorom riešim toto
/**
* Reset factory.
* @return Form
*/
protected function createComponentResetForm() {
$resetForm = new Form;
$resetForm->addProtection();
$resetForm->addText('email')
->setAttribute('placeholder', 'Emailová adresa')
->setAttribute('class', 'form-control input-bg')
->addRule(Form::EMAIL, 'Zadajte prosím, platnú emailovú adresu!');
$resetForm->addSubmit('signReset', 'Obnoviť heslo');
$resetForm->onSuccess[] = $this->resetFormSuccessSubmited;
return $resetForm;
}
/**
* @param Form $resetForm
*/
public function resetFormSuccessSubmited(Form $resetForm, $email) {
$resValues = $resetForm->getValues();
$email = $resValues->email;
$resEmail = $this->userRepository->findByEmail($email);
if(!$resEmail) {
$resetForm->addError('Neplatná Emailová adresa');
} else {
$mailtoken = Utils\Random::generate(32);
$template = new FileTemplate(__DIR__ . '/../templates/Email/reset.latte');
$template->registerFilter(new Engine);
$template->registerHelperLoader('\Nette\Templating\Helpers::loader');
$template->verifymail = $this->presenter->link('//Sign:verifymail', array(
'mailtoken' => $mailtoken,
));
$resetmail = new Message;
$resetmail->setFrom('PageName <email@email.xxx>')
->addTo($resetForm['email']->value)
->setSubject('Obnovenie Hesla')
->setHtmlBody($template);
$resetmailer = new SmtpMailer(array(
'host' => 'smtp.email.xxx',
'port' => 465,
'username' => 'email@email.xxx',
'password' => '****',
'secure' => 'ssl',
));
$resetmailer->send($resetmail);
$this->presenter->flashMessage(Html::el('div')
->setHtml('Na Vašu Emailovú adresu <strong class="email-strong"><br>' . $resetForm['email']->value . '<br></strong> bol zaslaný odkaz na nové heslo.'));
$this->presenter->redirect('mailfinish');
}
}
Zaslal som si token ktorý v poriadku prišiel na email ale teraz sa snažím overiť či je token správny ak áno presmeruj ak nie vyhoď chybu ale neviem ako na to
public function renderVerifymail($mailtoken) {
if(!$mailtoken) {
echo "Chyba zlý token!";
} else {
echo "Všetko je OK!";
}
//dump($mailtoken);
}
Ak dá správny token vyhodí Všetko je OK ak dám zlý vyhodí tiež Všetko je OK :) absolutne neviem ako overiť token bez DB
Editoval SontoEremo (20. 7. 2014 12:18)
- SontoEremo
- Člen | 341
Aurielle napsal(a):
Vycenzuruj si své heslo k e-mailu…
Sakra zabudol som ďakujem za varovanie
- David Matějka
- Moderator | 6445
no $mailtoken
si pri jeho vytvoreni (pri odesilani emailu)
ulozis do databaze a pak se pri overovani kouknes, jestli existuje.
- SontoEremo
- Člen | 341
matej21 napsal(a):
no
$mailtoken
si pri jeho vytvoreni (pri odesilani emailu) ulozis do databaze a pak se pri overovani kouknes, jestli existuje.
Takže či chcem alebo nie bez DB to nejde
a stačí v DB iba (id,email,token)?
- wicked
- Člen | 290
SontoEremo napsal(a):
matej21 napsal(a):
no
$mailtoken
si pri jeho vytvoreni (pri odesilani emailu) ulozis do databaze a pak se pri overovani kouknes, jestli existuje.Takže či chcem alebo nie bez DB to nejde
a stačí v DB iba (id,email,token)?
Já mám token uložen v tabulce komplet s přihlašovacím udajeme user, je na Tobě odkud token budeš tahat.
- petr.pavel
- Člen | 535
Asi ti je jasné, že někam si ten token uložit musíš, ne? Jak bys jinak
poznal, jestli ten, který ti přijde v url, je správně?
Jestli si ho uložíš do db nebo (spolu s e-mailem a platností) do souboru
nebo do sdílené paměti… to už je na tobě. Nejjednodušší je využít
stejné úložiště, které používáš v $userRepository, ne?
Teoreticky by šlo ho uložit i do session, Nette se v dokumentaci prsí, že ji chrání :-)