Als mensen zeggen dat de WordPress wachtwoord-reset het niet doet, bedoelen ze zelden hetzelfde. Soms komt de mail nooit aan. Soms komt hij wel, maar zegt de pagina dat de link ongeldig is. Soms sta je gewoon weer op het inlogscherm. Van buiten lijken die problemen identiek, en de fixes zijn totaal verschillend. Dit artikel is het denkkader: hoe het resetproces werkt, de vier oorzaken die het breken, en hoe je herkent welke bij jou speelt.
Hoe de WordPress wachtwoord-reset eigenlijk werkt
De reset is een pijplijn van vier stappen. Vrijwel elk "het werkt niet"-verhaal valt in één van die stappen.
- Je vraagt een reset aan. Het verzenden van het "Wachtwoord vergeten?"-formulier post naar
wp-login.php?action=lostpassword, wat de functieretrieve_password()aanroept. WordPress zoekt het account op via gebruikersnaam of e-mailadres en geeft eenWP_Errorterug als er geen match is. - WordPress maakt een resetsleutel. Bij een succesvolle lookup maakt
get_password_reset_key()een gehasht token aan en zet dat in de kolomuser_activation_keyopwp_users. Datzelfde token wordt verwerkt in een URL alswp-login.php?action=rp&key=...&login=.... - WordPress verstuurt de mail. De functie geeft het bericht door aan
wp_mail(), een wrapper rond PHP's mailer. Vanaf dat moment is de mail geen WordPress-probleem meer maar een afleverkwestie. Als de host uitgaande mail blokkeert of het domein heeft geen SPF of DKIM, dan komt de mail simpelweg niet aan. - Je klikt de link en stelt een nieuw wachtwoord in. WordPress checkt de sleutel tegen
user_activation_keyen tegen het filterpassword_reset_expiration, dat standaardDAY_IN_SECONDS(24 uur) is. Als de sleutel klopt en nog vers is, mag je een nieuw wachtwoord kiezen. Als hij ontbreekt, niet matcht of verlopen is, krijg je "Je wachtwoord-reset link lijkt ongeldig. Vraag hieronder een nieuwe link aan."
Elke storing die ik hieronder bespreek breekt op precies één van die vier stappen.
De vier redenen dat de wachtwoord-reset faalt
1. De mail komt nooit aan (veruit de meest voorkomende oorzaak)
Stappen 1 en 2 lukken gewoon. WordPress vindt de gebruiker, maakt een sleutel, geeft het bericht aan wp_mail(), en wp_mail() meldt succes. Alleen komt de mail nooit in de inbox aan.
Dit is met afstand de meest voorkomende oorzaak. WordPress duwt mail standaard via PHP's mail()-functie naar buiten. Op shared hosting betekent dat: vertrek vanaf een server zonder afzenderreputatie, zonder SPF of DKIM, zonder DMARC-uitlijning op jouw domein. Gmail, Outlook en Hotmail dumpen zulke berichten stilletjes. De fix zit dus niet in de loginstroom maar in de mailaflevering. Lees WordPress verstuurt geen e-mail voor het diagnosepad en de SMTP-relay-setup die wp_mail() vervangt.
2. De resetlink is al gebruikt of verlopen
De mail is aangekomen, je klikt de link, en WordPress meldt "Je wachtwoord-reset link lijkt ongeldig". De oorzaak zit op stap 4: de sleutel in de URL matcht niet meer met user_activation_key voor die gebruiker. Daar zijn twee manieren voor.
De eerste is verloop. De standaardlevensduur is 24 uur, gezet via het filter password_reset_expiration. Als je gisteren een reset hebt aangevraagd en de mail pas vandaag opent, is de sleutel weg. Vraag een nieuwe aan en gebruik die in dezelfde sessie.
De tweede is hergebruik. WordPress wist user_activation_key zodra een reset slaagt, en elke nieuwe "Wachtwoord vergeten?"-aanvraag overschrijft de vorige sleutel ook. Heb je twee keer achter elkaar op "Wachtwoord vergeten" geklikt, dan werkt alleen de meest recente link nog.
3. De resetlink wijst naar het verkeerde domein
WordPress bouwt de link in de mail uit WP_HOME (of de optie home in de database als WP_HOME niet in wp-config.php staat). Als die waarden niet matchen met het domein dat bezoekers gebruiken, wijst de link in de mail naar de verkeerde plek. Je krijgt een 404, een andere site, of een verbindingsfout.
Ik zie dit het vaakst na een domeinmigratie, na een HTTPS-uitrol waarbij de optie nog op http:// bleef staan, of bij een multisite met gemapte domeinen. De check is snel: open wp-config.php en zoek WP_HOME. Staat hij er niet, kijk dan naar de optie home in de database. Beide moeten matchen met de URL die je echt serveert, inclusief het schema en wel of geen www.. Diezelfde scheefstand veroorzaakt ook de WordPress login redirect loop, dus zie je het ene symptoom, dan zie je meestal ook het andere.
4. Het account hangt aan een ander e-mailadres dan je denkt
WordPress slaat per gebruiker één e-mailadres op, in de kolom user_email. Daar gaat de resetmail heen, niet naar het adres dat jij nu toevallig gebruikt. Is het account jaren geleden aangemaakt met een oud werkadres, of gemigreerd uit een ander systeem, dan stuurt "Wachtwoord vergeten" de link naar dat oude adres. Vanuit jouw inbox: niks te zien. Vanuit WordPress: alles is goed gegaan.
Check je gebruikersrecord in de tabel wp_users op user_email, of vraag een andere admin op de site om dat voor je te doen. Gaat de link naar een adres dat jij niet meer onder controle hebt, dan kan een admin het e-mailveld direct bijwerken en daarna een verse reset triggeren.
Wat wachtwoord reset werkt niet NIET is
Dit is de sectie die de meeste verspilde tijd voorkomt. De "Wachtwoord vergeten"-stroom lijkt op een loginprobleem, maar de meeste dingen waar mensen het mee verwarren zijn dat helemaal niet.
- Het is geen cookie- of sessieprobleem. Cookieproblemen breken het inlogformulier zelf, niet de resetmail. Komt de mail wel aan en werkt de link, maar blijf je daarna niet ingelogd? Dan zit je in een ander probleem. Lees cookies zijn geblokkeerd of niet ondersteund in WordPress.
- Het is geen serveruitval. Als
wp-login.phpüberhaupt laadt in je browser, dan is de server bereikbaar en draait WordPress gewoon. Een mislukte reset is een logisch probleem in een verder werkende site, geen storing. - Het is geen geblokkeerd of geband account. WordPress laat een duidelijke foutmelding zien als je account vergrendeld is door een securityplugin of tegengehouden wordt door een brute-force-shield. Een geblokkeerd account slikt je resetverzoek niet stilletjes weg, het zegt het tegen je. Zie je helemaal geen foutmelding, dan is een blokkade niet jouw probleem.
- Het is niet hetzelfde als "ik kan niet inloggen". "Niet kunnen inloggen" is de paraplu voor alles wat misgaat op het inlogscherm: cookies, rechten, redirects, het hele rijtje. Wachtwoord reset werkt niet is één specifieke storing daarbinnen: het herstelpad dat je had moeten redden toen je je wachtwoord vergat. Behandel je beide als hetzelfde probleem, dan beland je in het verkeerde diagnosepad. Voor het overzicht, lees waarom je niet kunt inloggen op WordPress.
Welke van de vier is van jou?
Loop de vier oorzaken in volgorde af. Is de mail aangekomen? Zo niet: oorzaak 1, en het werk gebeurt in WordPress verstuurt geen e-mail. Zo ja: klik de link. Vond WordPress hem ongeldig? Oorzaak 2: vraag meteen een nieuwe aan. Laadt de link de verkeerde site of een 404? Oorzaak 3, fix WP_HOME. Gaat de mail naar een adres dat je niet meer beheert? Oorzaak 4: een admin moet het e-mailveld bijwerken. Van buiten lijken ze identiek, totdat je weet welke stap van de pijplijn brak.