03. april 2006 - 18:46Der er
8 kommentarer og 1 løsning
få tilsendt password, fra email i stedet for brugernavn
Jeg har nedenstående script hvor en bruger kan indtaste sit brugernavn hvis han har glemt sit password. Han får så automatisk tilsendt et nyt. Jeg ville nu bare hellere have at det var brugerens email som skulle indtastes i stedet for. kan det umiddelbart lade sig gøre? Brugerens email ligger i en anden tabel end userName.. Den ligger i en tabel ved navn "userProfile" felt userEmail
} } else { err_message('Din nye adgangskode kunne ikke blive sendt til dig, da du ikke har indtastet et gyldigt brugernavn. Tryk <a href="signup.php">HER</a> og opret dig som ny bruger.'); } } else { err_message('Un-authorized access detected your ip has been logged');
Ja, det skulle ikke være det store problem, hvis du udskifter "where username='$userName'" med "where mail='$userMail'" osv.
Du skal bare sørge for, at mail nu bliver unik, så to brugere ikke har samme mail. Desuden vil det nok være en god idé at sende en "anmodning om kvittering" til mail-adressen, så en ny kode først genereres, hvis et validerings-link sendt pr. mail bliver aktiveret.
Ellers risikerer du, at brugere får nulstillet koder efter andres ønske...
Jeg har tænkt over det med at det skal være ens email man skal indtaste i stedet.. tror faktisk at det er en dum løsning alligevel, da man faktisk kan se brugernes emails på siden... men hva fann gør man så for at undgå misbrug.. er bare totalt bange for at en som tror han er sjov kunne finde på at indtaste en masse brugernavne og på den måde slette folks passwords så intet virker:(
CREATE TABLE `users` ( `userId` int(12) NOT NULL auto_increment, `userStatus` tinyint(4) NOT NULL default '0', `userName` char(40) NOT NULL default '0', `userPassword` char(48) NOT NULL default '0', `sidsteBesoeg` datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY (`userId`), UNIQUE KEY `userName` (`userName`) ) TYPE=MyISAM AUTO_INCREMENT=158 ;
CREATE TABLE `userProfile` ( `userId` int(12) NOT NULL default '0', `userFirstName` varchar(64) NOT NULL default '', `userEmail` varchar(64) NOT NULL default '', `userLastName` varchar(64) NOT NULL default '', `userCompany` varchar(15) NOT NULL default '', `userAddr1` varchar(64) NOT NULL default '', `userAddr2` varchar(64) NOT NULL default '', `userCity` varchar(64) NOT NULL default '', `userState` varchar(64) NOT NULL default '', `userCountry` varchar(64) NOT NULL default '', `userTel` varchar(15) NOT NULL default '', `userMobiTel` varchar(15) NOT NULL default '', `userHomeTel` varchar(15) NOT NULL default '', `userFax` varchar(15) NOT NULL default '', `userZip` varchar(10) NOT NULL default '', `userWeb` varchar(128) NOT NULL default '', `userValidationKey` varchar(32) NOT NULL default '', `userIP` varchar(32) NOT NULL default '', `userSignUp` datetime NOT NULL default '0000-00-00 00:00:00', `userValidated` tinyint(1) NOT NULL default '0', `userNewsLetter` tinyint(1) NOT NULL default '0', PRIMARY KEY (`userId`) ) TYPE=MyISAM;
Du lader folk indtaste ENTEN mail eller brugernavn - begge dele valideres i henhold til databasen, så det indtastede skal være gyldigt.
Herefter sender du dem en mail (som nu er valideret), hvor der er en forklarende tekst ("denne mail er sendt fra site.dk, da du har angivet, at du ikke kan huske dit password..."). Desuden findes et link til en password-eraser-og-generator:
resetpwd.php kan så bede brugeren om at indtaste sit nye, ønskede password, da $key bekræfter, at han virkelig ER den korrekte modtager (det bliver genereret inden afsendelse og indsættes i en tabel - se nedenfor).
Herefter er passwordet ændret og brugeren kan komme til.
Hvordan bliver $key så unik? Lav en tabel med mail, tilhørende key og timeout (man kan jo forlange, at brugeren ændrer sit pwd indenfor 2 dage, når han har anmodet om nyt pwd)...
Nej, det behøver altså ikke være så svært, men det tager selvfølgelig lidt tid. På den anden side, så kunne du lade dit nuværende system fungere for nu, og så have det andet i baghovedet, hvis det virkelig viser sig, at der sker mange uønskede "resets".
Ja.. det bliver sq nok den model jeg vil følge.. hvis der endelig skulle komme misbrug kan jeg jo bare slå muligheden fra, til jeg får lavet en ordentlig og sikker måde at resette password på.. men tak for hjælpen.. smider du ikke lige et svar :)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.