Helaas is mijn kennis van PHP en MySQL te beperkt om het helemaal zelf te doen. Een handleiding met aanwijzingen is ook welkom (als ik dan niet uitkom, stel ik mijn vragen op helpmij). Ook heb ik gezien dat er genoeg handleidingen voor scripts op internet te vinden zijn die in de buurt komen van wat ik wil, maar toch kan ik net die ene handleiding niet vinden.
Ik denk te weten waar ik op moet letten bij het gebruiken van een script van een ander. Daarom lijkt mij een handleiding met aanwijzingen ook de aangewezen (en meest leerzame) weg.
Wie kan mij helpen aan een handleiding voor een script met (ongeveer) de volgende stappen:
- registratie met vrije keuze wachtwoord
- check e-mail
- validatie door beheerder
- inloggen (met mogelijkheid reset wachtwoord)
De gebruiker moet bij voorkeur de mogelijkheid hebben om het wachtwoord zelf te wijzigen.
Ik ben bereid om een heleboel te leren, maar m'n grijze massa begrijpt niet alles
Helaas is mijn kennis van PHP en MySQL te beperkt om het helemaal zelf te doen. Een handleiding met aanwijzingen is ook welkom [b](als ik dan niet uitkom, stel ik mijn vragen op helpmij).
Je bedoelt PHPhulp, neem ik aan? ;-)
Wat is je PHP kennis tot nu toe? En waar loop je tot nu toe op vast?
Oeps, dat krijg je ervan. Natuurlijk plaats ik mijn vragen dan hier...
Wat is je PHP kennis tot nu toe? En waar loop je tot nu toe op vast?
Tja, hoe meet je kennis, of hoe geef je die weer? Ik begrijp wat een PHP-file doet, en kan eenvoudige scriptjes schrijven, maar heb wel veel voorbeelden nodig. Leve het internet...
En waar ik op vastloop is het versturen van de validatielink en het bieden van de mogelijkheid om de gebruiker z'n wachtwoord te laten wijzigen. Geen idee hoe ik dat moet aanpakken...
Laten we het project eerst maar eens in stukken hakken. En dat is her registratieformulier.
Als iemand het formulier verstuurt, dan vindt er een eerst een validatie plaats:
- Is de username uniek
- Is het ingevoerde mailadres wel geldig (hint)
- Is het bedachte password lang genoeg en sterk? (Hint)
Als hieraan is voldaan, dan kan je de gebruiker in de database plaatsen, met een unieke code erbij. Die stuur je naar per e-mail naar de gebruiker toe, en als die code overeenkomt dan is het mailadres bevestigd, en dan kan je een bericht naar de beheerder sturen of ze het account handmatig kunnen openstellen.
Wie kan mij helpen aan een handleiding voor een script met (ongeveer) de volgende stappen:
- registratie met vrije keuze wachtwoord
- check e-mail
- validatie door beheerder
- inloggen (met mogelijkheid reset wachtwoord)
De gebruiker moet bij voorkeur de mogelijkheid hebben om het wachtwoord zelf te wijzigen.
registratie met keuze wachtwoord:
Zoals ieder formulier in PHP: HTML formulier maken, als deze verzonden is dan VALIDEREN en als deze door de validatie komt dan gebruiker toevoegen aan de database, email versturen naar gebruiker en/of beheerder(s) en gebruiker doorsturen naar een andere pagina. Het password dien je gecodeerd op te slaan in de database. Google eens op BCRYPT.
check e-mail (email verificatie)
Een token aanmaken, dit token opslaan in de users tabel waar ook de andere gegevens staan van de zojuist geregistreerde user. (dus een kwestie van een extra kolom met de naam 'token' of iets dergelijks). Dan in de mail een link meesturen waar de gebruiker in zijn email op kan klikken. In deze link moet het token staan. bijvoorbeeld: http://phphulp.nl/verify-email.php?token=jdjcfuhe9ry98ygdks. Klikt deze gebruiker op deze link dan zal hij op een nieuwe pagina komen 'verify-email.php' waarin een GET variabele gelezen kan worden met daarin het token. Dit token ga je vervolgens proberen terug te vinden in de tabel 'users' ( SELECT id FROM users WHERE token='jdjcfuhe9ry98ygdks' ) Indien gevonden: zet de kolom 'verified' op 1 en verwijder het token.
validatie door beheerder:
Dit betekend een nieuwe kolom in de users table. Bijvoorbeeld met de naam 'active' welke dan in eerste instantie op 0 staat. de beheerder moet hier een 1 van maken
inloggen:
gebruiker een username of email en een wachtwoord laten invullen en dan deze username/mailadres en (gecodeerd) wachtwoord opzoeken in de database. Gevonden? mooi gebruiker wordt dan ingelogd door een variabele in de sessie te plaatsen. bijv. $_SESSION['login'] = $user_id; (Sorry meer dan dat is het niet. Vervolgens user doorsturen naar een pagina die je logisch lijkt. Vergeet overigens session_start() niet. Nog even een zijstapje: sla nooit ongecodeerde gebruiker-wachtwoorden op in de database maar codeer deze eerst met bijv. BCrypt. Bij het login formulier codeer je op exact dezelfde wijze het ingevoerde wachtwoord en dit gecodeerde wachtwoord (of hash) vergelijk je dan met die in de database.
reset wachtwoord:
laat gebruiker emailadres invullen en kijk of je deze kunt vinden in de database. zo ja: Maak een token en sla deze op in de database en stuur deze gebruiker een email met een unieke link net als bij 'email verificatie'. gebruiker klikt op de link die hij aantreft in zijn email box en komt op een nieuwe pagina bijv. password-reset.php alwaar wederom in de database gezocht wordt op dit token. Gevonden? Maak een random wachtwoord aan. Stuur het random wachtwoord per mail naar de gebruiker. Codeer het nieuwe wachtwoord en vervang de hash voor de oude in de database. Verwijder het token.
beveiligde pagina:
controleer of de variabele bestaat in de sessie. zo ja: ga door en zo nee redirect de user naar het inlog formulier
mogelijke uitbreidingen:
- rollen aan users toekennen zodat we verschillende users met verschillende rechten kunnen benoemen.
- datum van registratie en/of laatste inlog bijhouden
- een 'edit mijn profiel' pagina
- een 'verander mijn password pagina'
- een 'account opheffen' pagina
Dat is wel gebouwd in classes. Niet iets wat ik een PHP-beginner aan kan raden om in te werken.
Zelf neig ik naar zelfbouw, en de stappen proberen te volgen die ik en Frank in dit topic hebben uitgelegd.
Op die manier leer je PHP ook goed en grondig kennen.
"Maak een random wachtwoord aan. Stuur het random wachtwoord per mail naar de gebruiker."
En als iemand toegang heeft tot de mailbox van de gebruiker kan hij daarin (desnoods 2 jaar later) het wachtwoord opduikelen.
Liever zou ik de gebruiker vragen om 2x een zelf gekozen (sterk) wachtwoord in te voeren.
Dat voorkomt ook niet onthoudbare wachtwoorden die elke keer weer opgezocht moeten worden in een lijst of op een geeltje op de monitor.
(ok, als iemand toegang heeft tot de mailbox kan hij ook het ww. resetten, maar in elk geval laat dat het spoor na dat gebruiker ineens niet meer met het bekende ww in kan loggen.)
Hoi Ivo, dit zijn goede overwegingen die de veiligheid doen opschroeven. Over de veiligheid heb ik bewust niet geschreven omdat dan een soort boekwerk ontstaat. Ik zou tegen de gebruiker willen zeggen dat bovenstaande puur is om de skills te beoefenen en misschien geschikt kan zijn voor een hobby website of iets dergelijks maar voor het echte werk komt er natuurlijk nog wel even iets bij kijken om het veilig te maken. Ik heb overigens de tekst nog iets aangepast.