Lost pass link expires 24h
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:
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
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:
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
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.
Ohke ik heb het nu zo gedaan:
Hoe kan ik het dan nu doen?
Hoe kan ik het dan nu doen?
Gewijzigd op 10/03/2011 16:17:33 door Jordi Kroon
Welke code, waarmee vergelijken? Database?
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?
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?
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
- 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
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)
Tweede request: de link met een code en een user id
Dan controleer je met iets als
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/
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)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$sql = "
UPDATE user_table
SET verification_requested = NOW(), verification_code = '". $code ."'
WHERE username = '". $username ."'
";
?>
$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)
1
2
3
4
5
6
7
8
9
10
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
";
?>
$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
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 )
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 )
O ja ...
Wat je ook altijd kan doen, is de clausule als extra veld zetten
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
Wat je ook altijd kan doen, is de clausule als extra veld zetten
Code (php)
1
2
3
4
5
6
7
8
9
10
11
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
";
?>
$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
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
Is de datum van nu groter als de verloopdatum dan is de code verlopen anders gaat hij een nieuw wachtwoord genereren




