Ako na odoslanie zabudnutého hesla
- SontoEremo
- Člen | 341
Zdravím ľudia poradil by mi niekto z Vás ako na zabnuté heslo ktoré by bolo odoslané na email užívateľovi:
Zatiaľ to mám takto
SignPresenter
protected function createComponentSignResetForm() {
$sign_RESET_form = new Form;
$sign_RESET_form->addProtection();
$sign_RESET_form->addText('username')
->setAttribute('placeholder', 'Užívateľské meno')
->setAttribute('class', 'form-control');
$sign_RESET_form->addText('email')
->setAttribute('placeholder', 'Emailová adresa')
->setAttribute('class', 'form-control');
$sign_RESET_form->addSubmit('signReset', 'Obnoviť heslo');
$sign_RESET_form->onSuccess[] = $this->signResetSuccessSubmitted;
return $sign_RESET_form;
}
public function signResetSuccessSubmitted(Form $sign_RESET_form) {
if (Čo sem dať aby to porovnalo či je platný email a username?) {
$template = new FileTemplate(__DIR__ . '/../templates/Reset/resetpass.latte');
$template->registerFilter(new Engine);
$template->registerHelperLoader('\Nette\Templating\Helpers::loader');
$mail = new Message;
$mail->setFrom('VistmoLabs <vistmolabs@vistmolabs.org>')
->addTo($sign_RESET_form['email'])
->setSubject('Zabudnuté heslo')
->setHtmlBody($template);
$mailer = new SmtpMailer(array(
'host' => 'NEJAKY HOST',
'port' => 465,
'username' => 'NEJAKY JMENO',
'password' => 'HESLA SE NA FÓRA NEKOPÍRUJÍ!!!',
'secure' => 'ssl',
));
$mailer->send($mail);
} else {
echo "Neplatné užívateľskémeno alebo emailová adresa";
}
}
a resetpass.latte
{block signtitle}{/block}
{block signcontent}
<span>Vyžiadali ste si heslo z formulára <strong>"Zabudo som Heslo"</strong></span>
<p>
Užívateľské meno: {ako sem zadať username}
Emailová adresa: {ako sem zadať email}
Vaše heslo: {ako sem zadať heslo}
</p>
{/block}
Za všetky radi vopred Ďakujem.
- matto
- Člen | 55
tieto udaje si vytiahnes z databazy a v prezentery ich len predas sablone takto:
$template->name = $name
A v sablone vypises
Užívateľské meno: {$name}
Druha vec:
Hesla by si nemal ukladat ako plain text, ale zahashovane s pouzitim funkcie
crypt(), takze ich nebudes moct poslat uzivatelovi ale namiesto toho mu ponuknes
moznost aby si vytvoril nove heslo.
Tretia vec:
„Čo sem dať aby to porovnalo či je platný email a
username?“
Validacia sa riesi v tovarnicke formularu: https://doc.nette.org/cs/forms#…
Editoval matto (21. 6. 2014 15:36)
- SontoEremo
- Člen | 341
@matto
Ok hesla ukladám klasický cez UserManager zo Sandboxu
takže navrhuješ ak užívateľ zabudne svoje heslo nemám mu ho preposielať ale mám spraviť formulár na nové heslo?
- MartinitCZ
- Člen | 580
@SontoEremo Posílat hesla emailem je security hell. Na email pošli link s hashem, který bude odkazovat na formulář pro změnu hesla.
- SontoEremo
- Člen | 341
**@martinit & @matto **
Ďakujem ale aj tak ako na to? myslím všetko to okolo toho
overiť username a email ak pasuje zaslať hash na email a po kliknutí
zobraziť formulár so zmenou hesla?
- MartinitCZ
- Člen | 580
Zkoušej a uč se. Stylem „udělejte to za mě“ se nikam neposuneš. Toto bohužel není prvně.
Editoval martinit (21. 6. 2014 18:41)
- SontoEremo
- Člen | 341
**@martinit **
Ja samozrejme nežiadam aby si to niekto za mňa odmakal tak sa nenaučím ale
mal som na mysli nejaké popostrčenie. Myslím si, že toto fúrom je na pomoc
začiatočníkom predsa pracovať s Frameworkom a samotným php je trocha
iná káva
- SontoEremo
- Člen | 341
Toto asi nie je správne keďže mi to nefunguje
protected function createComponentSignResetForm() {
$sign_RESET_form = new Form;
$sign_RESET_form->addProtection();
$sign_RESET_form->addText('username')
->setAttribute('placeholder', 'Užívateľské meno')
->setAttribute('class', 'form-control');
$sign_RESET_form->addText('email')
->setAttribute('placeholder', 'Emailová adresa')
->setAttribute('class', 'form-control');
$sign_RESET_form->addSubmit('signReset', 'Obnoviť heslo');
$sign_RESET_form->onSuccess[] = $this->signResetSuccessSubmitted;
return $sign_RESET_form;
}
public function signResetSuccessSubmitted(Form $sign_RESET_form) {
$values = $sign_RESET_form->getValues();
$sample = array($this->userRepository->userexists('username'), $this->userRepository->usermailexists('email'))
if($values === $sample) {
echo "OK";
} else {
echo "BAD";
}
}
Neviem ako overiť či je email a username vyplnení a či je správny či sedí email s username
- Oli
- Člen | 1215
@SontoEremo:
- addProtection je tady zbytečné si myslím. Jediné co by mohl útočník udělat, že pošle mail na reset hesla na mail „obeti“.
- Nedával bych tam to jméno. Já třeba mám několik jmen (podle toho jestli jsou jeste volny nebo ne) a zkouset jakej ze to mam mail a jmeno je vzdycky vopruz. Zkusim nejaky 4 varianty a pak bud zalozim novej ucet nebo se na tu stranku proste neloguju.
- po odeslání by jsi měl mít něco jako
$fromDb = $this->userRepository->getByMail($values->email);
if ($fromDb)
{
// Uživatelem zadaný email je v db, pošleš mu mail.
} else
{
// Uživatel není v db, ukážeš addError, flashMessage, ze vložený mail není v db
}
public function getByMail($mail)
{
return $context->table('users')->where('email', $mail)->fetch();
}