Lost pass link expires 24h

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jordi Kroon

Jordi Kroon

10/03/2011 15:53:11
Quote Anchor link
Hallo,

Ik ben bezig met een script voor wachtwoord vergeten.
Dat loopt tot nu toe goed .

Ik zet in de database : user_id , date , code

Date is de tijd waneer het verloopt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$date
= date(" G:i:s d-m-Y", strtotime('+1 day'));
?>


Maar nu wil ik controleren of de code nog niet verlopen is.
Om te zorgen dat er maar 1x per dag het wachtwoord veranderd kan worden.

Maar hoe kan ik dat doen
 
PHP hulp

PHP hulp

06/01/2025 07:50:27
 
- SanThe -

- SanThe -

10/03/2011 16:08:04
Quote Anchor link
Datum en tijd zijn altijd in yyyy-mm-dd hh:ii:ss format. Wat jij hebt is tekst en daar kan je verder niks mee.
 
Jordi Kroon

Jordi Kroon

10/03/2011 16:12:25
Quote Anchor link
Ohke ik heb het nu zo gedaan:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$date
= date(" Y-m-d H:i:s", strtotime('+1 day'));
?>


Hoe kan ik het dan nu doen?
Gewijzigd op 10/03/2011 16:17:33 door Jordi Kroon
 
- SanThe -

- SanThe -

10/03/2011 16:35:51
Quote Anchor link
Welke code, waarmee vergelijken? Database?
 
Kris Peeters

Kris Peeters

10/03/2011 16:55:35
Quote Anchor link
Misschien kan je eerst eens (in woorden) uitleggen welke procedure je precies van plan bent.

Ik veronderstel iets in de trend:

- de gebruiker stuurt een "paswoord vergeten" request; post zijn username en/of e-mail adrs.
- Jij (de scripter) stuurt dan een e-mail naar het e-mail adres van die gebruiker, met een link die een geheime code bevat.
- Als de gebruiker die link opent, krijgt de gebruiker een formulier waarin het nieuwe wachtwoord wordt ingevuld. De geheime code zet je ook ergens in een hidden.
- Bij het verzenden controleer jij (de scripter) dan de geheime code; indien die klopt, vervang je het wachtwoord.

Is dit waar je aan dacht?
Of hoe zie jij het?
 
Jordi Kroon

Jordi Kroon

10/03/2011 17:18:11
Quote Anchor link
Ik zal het zo uitleggen:

- De gebruiker weet zijn wachtwoord niet meer. Hij gaat naar de pagina - Werkt al
- De gebruiker vult zijn naam of email adres in - werkt al
- De gebruiker krijgt een email met een code en zijn userid - werkt al
- De gebruiker klikt op die code en krijgt nog een email maar dan met zijn niewe wachtwoord ( random aangemaakt )

Maar dan:

Stel iemand klikt naar 25u op die link . Dan moet er een melding komen dat de link niet meer gelding is.
Stel iemand gaat weer naar wachtwoord vergeten binnen die 24u dan moet hij of zij een melding krijgen dat er vandaag al een poging is gedaan om het wachtwoord te veranderen.

En die laatste 2 puntjes bedoelde ik met het controleren of de code niet verlopen is
Gewijzigd op 10/03/2011 17:18:50 door Jordi Kroon
 
Kris Peeters

Kris Peeters

10/03/2011 17:46:25
Quote Anchor link
Okay

Ofwel heb je dus een aparte tabel ofwel voeg je een aantal velden toe aan de user tabel.

- verification_code : VARCHAR
- verification_requested : DATETIME

Bij het eerste "paswoord vergeten" verzoek, vul je in verification_requested in: NOW()

Dat wordt dan iets als (zie zelf dat je je beschermt tegen injection)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$sql
= "
UPDATE user_table
SET verification_requested = NOW(), verification_code = '"
. $code ."'
WHERE username = '"
. $username ."'
"
;
?>


Tweede request: de link met een code en een user id

Dan controleer je met iets als
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$sql
="
SELECT id FROM user_table
WHERE
  id = '"
. $id."'
  AND verification_code = '"
. $code ."'
  AND (verification_requested + INTERVAL 24 HOUR > NOW() )
LIMIT 1
"
;
?>


Indien je hier een row kan fetchen, mag je het paswoord resetten en mailen

Extra leesvoer:
http://www.phphulp.nl/php/tutorial/overig/datum-en-tijdfuncties-in-mysql/519/
Gewijzigd op 10/03/2011 18:00:40 door Kris Peeters
 
Jordi Kroon

Jordi Kroon

10/03/2011 17:58:39
Quote Anchor link
Oke maar hoe weet ik dan precies of de tijd verlopen is? Want ik neem aan dat als ik geen resultaat krijg dat dan of er geen request is of dat de code niet goed is of dat de tijd verlopen is

En dat wil ik dus appart te zien krijgen

Ook had ik in mijn database een andere tabel:

sfi_lost_pass
- id
- userid
- code
- date ( waneer hij verloopt )
 
Kris Peeters

Kris Peeters

10/03/2011 18:05:54
Quote Anchor link
O ja ...

Wat je ook altijd kan doen, is de clausule als extra veld zetten

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$sql
="
SELECT
  id, (verification_requested + INTERVAL 24 HOUR > NOW()) AS verificatie_op_tijd
FROM user_table
WHERE
  id = '"
. $id."'
  AND verification_code = '"
. $code ."'
LIMIT 1
"
;
?>


Dan heb je dus $row['verificatie_op_tijd'] die een 1 of 0 geeft.

Met een aparte tabel lukt het uiteraard ook; je moet dan wel wat meer JOIN gebruiken
 
Jordi Kroon

Jordi Kroon

10/03/2011 22:59:19
Quote Anchor link
Ik heb het al voor me kaar ik heb de datum van nu / de verloop datum met elkaar vergeleken
Is de datum van nu groter als de verloopdatum dan is de code verlopen anders gaat hij een nieuw wachtwoord genereren
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.