Logge inn med e-postadresse i WordPress: slik fungerer det

Du kan logge inn på WordPress med e-postadressen din akkurat som med brukernavn – og det har du kunnet gjøre uten en eneste kodelinje helt siden WordPress 4.5 kom i april 2016. Mange eldre guider forteller fortsatt at du må lime inn en funksjon i functions.php for å få dette til å virke, men det stemmer ikke lenger. I denne oppdaterte guiden forklarer vi hvordan innlogging med e-post fungerer i dag, hvorfor den gamle koden både er unødvendig og utdatert, hvordan du bekrefter at det er slått på, og hva du gjør hvis du vil tvinge fram – eller tvert imot slå av – innlogging med e-postadresse.

Viktige punkter

  • Standard siden 2016: WordPress har støttet innlogging med e-postadresse i tillegg til brukernavn som standard helt siden versjon 4.5 (april 2016).
  • Ingen kode nødvendig: Du trenger verken plugin eller functions.php-snutt for å aktivere det – feltet på wp-login.php heter «Brukernavn eller e-postadresse».
  • Gammel kode er utdatert: Snutter med get_user_by_email() bør fjernes; funksjonen har vært avviklet siden WordPress 3.3.0.
  • Virker ikke? Årsaken er nesten alltid et egendefinert innloggingsskjema, en sikkerhets-/medlemsplugin eller mellomlagring – ikke kjernen.
  • Styr oppførselen: Med plugin kan du tvinge innlogging kun med e-post, eller slå e-postinnlogging helt av.
  • Sikkerhet: Valget av felt er ingen sikkerhetsløsning i seg selv – sterke passord, begrensede innloggingsforsøk og tofaktor er det som teller.

Kan du logge inn med e-postadresse i WordPress?

Ja. I alle WordPress-versjoner fra og med 4.5 kan brukere logge inn med enten brukernavn eller e-postadresse i det vanlige innloggingsskjemaet på wp-login.php. Dette er standardoppførsel i kjernen, og du trenger verken plugin eller egen kode for å aktivere det.

Fram til WordPress 4.5, som ble sluppet 12. april 2016 under kodenavnet «Coleman», godtok innloggingsfeltet bare brukernavnet. Derfor laget utviklere små kodesnutter som koblet e-postadressen til riktig brukernavn. I dag gjør WordPress dette automatisk, og feltet på innloggingssiden er dessuten merket «Brukernavn eller e-postadresse» for å gjøre det tydelig. Siden praktisk talt alle aktive nettsteder i dag kjører en versjon langt nyere enn 4.5, går vi ut fra at e-postinnlogging allerede er tilgjengelig på sidene du jobber med.

Hvorfor den gamle functions.php-koden ikke lenger trengs

Den klassiske løsningen var å legge en funksjon i temaets functions.php som slår opp brukeren ut fra e-postadressen og bytter den ut med brukernavnet før WordPress sjekker påloggingen. En typisk variant så slik ut:

function login_with_email_address($username) {
    $user = get_user_by_email($username);
    if (!empty($user->user_login))
        $username = $user->user_login;
    return $username;
}
add_action('wp_authenticate', 'login_with_email_address');

Det er to grunner til at du ikke bør bruke denne koden i dag. For det første er den overflødig: WordPress håndterer e-postinnlogging selv, så snutten gir ingen ny funksjonalitet. For det andre er den utdatert. Funksjonen get_user_by_email() har vært avviklet (deprecated) siden WordPress 3.3.0, og den riktige erstatningen er get_user_by('email', $email). Kaller du den gamle funksjonen, risikerer du en «deprecated»-advarsel i loggene dine, og i verste fall kolliderer egen kode med kjernens egen innlogging og gir uforutsigbar oppførsel.

Konklusjonen er enkel: Fjern slike snutter hvis du har dem liggende. Vil du rydde opp i temaet ditt, finner du en oversikt over trygge og nyttige kodesnutter for functions.php som fortsatt gir mening å bruke. Og uansett hva du redigerer i temaet bør du alltid ta en backup av WordPress først, slik at du raskt kan rulle tilbake hvis noe går galt.

Slik fungerer e-postinnlogging under panseret

Når du sender inn innloggingsskjemaet, kjører WordPress en kjede av autentiseringsfunksjoner. To av dem er sentrale: én prøver å logge deg inn med brukernavn, og én prøver med e-postadresse. Funksjonen wp_authenticate_email_password(), som ble lagt til i versjon 4.5, tar seg av e-post-delen.

Forenklet skjer dette: Hvis du har skrevet inn noe som ser ut som en e-postadresse, slår WordPress opp kontoen med den adressen. Finnes det ingen konto, returneres en feil om «ugyldig e-post». Finnes kontoen, kjøres filteret wp_authenticate_user (som lar andre plugins blokkere eller endre innloggingen), og deretter sjekkes passordet mot den lagrede hash-verdien. Er passordet riktig, logges du inn; er det feil, får du en melding med lenke til «glemt passord». Et nyttig poeng er at WordPress samtidig oppdaterer passord-hashen til et nyere format hvis den lagrede var utdatert – helt usynlig for deg som bruker.

Fordi dette ligger i selve kjernen, virker e-postinnlogging likt enten du bruker standardtemaet eller et egendefinert tema, og enten du har én bruker eller tusen. Det eneste som kreves er at e-postadressen i profilen er korrekt og unik.

Slik bekrefter du at e-postinnlogging er på

Den raskeste måten å sjekke dette på er å teste selv. Gå fram slik:

  1. Logg ut av WordPress, eller åpne innloggingssiden i et privat nettleservindu.
  2. Gå til dittdomene.no/wp-login.php eller dittdomene.no/wp-admin.
  3. Skriv inn e-postadressen som er knyttet til kontoen din i stedet for brukernavnet.
  4. Fyll inn passordet og trykk «Logg inn».

Kommer du inn, er e-postinnlogging aktiv – slik den skal være som standard. Legg også merke til teksten over feltet: Står det «Brukernavn eller e-postadresse», bekrefter det at kjernens egen løsning er i bruk. Er feltet derimot merket bare «Brukernavn», eller du får feilmelding når du bruker e-post, er sjansen stor for at et tema, en plugin eller et egendefinert innloggingsskjema overstyrer standardoppførselen.

Hvorfor virker ikke e-postinnlogging hos meg?

Hvis e-postinnlogging ikke fungerer, er årsaken særlig sjelden WordPress-kjernen i seg selv – den støtter dette som standard. Problemet ligger nesten alltid i noe som er lagt oppå toppen. Her er de vanligste forklaringene.

Egendefinerte innloggingsskjemaer

Mange temaer og sidebyggere har sitt eget innloggingsskjema i stedet for standardsiden på wp-login.php. Et slikt skjema kan være programmert til å bare godta brukernavn. Løsningen er å teste den opprinnelige wp-login.php-siden direkte: Virker e-post der, men ikke i temaets skjema, ligger begrensningen i temaet eller pluginen som leverer skjemaet.

Sikkerhets- og medlemsplugins

Plugins for sikkerhet, medlemskap eller egendefinert innlogging endrer ofte hvordan brukere autentiseres. Noen tvinger fram e-postinnlogging, andre slår den av, og noen bytter ut hele innloggingssiden. Hvis oppførselen plutselig endret seg etter at du installerte en plugin, er den en sannsynlig synder. Deaktiver mistenkte plugins midlertidig og test på nytt for å finne årsaken.

Mellomlagring (caching) og nettleser

Aggressiv mellomlagring kan vise en gammel versjon av innloggingssiden, slik at det ser ut som om ingenting endrer seg. Tøm hurtigbufferen (både i en eventuell cache-plugin og i nettleseren), eller test i et privat vindu. Dette er sjelden selve årsaken, men det utelukker en vanlig kilde til forvirring.

Slik tvinger du innlogging kun med e-post

Noen ønsker det motsatte av det folk pleide å be om: De vil at brukere kun skal kunne logge inn med e-postadresse, ikke brukernavn. Et typisk motiv er sikkerhet – brukernavn er ofte synlige utad (for eksempel som forfatternavn), mens e-postadressen er mer privat og dermed vanskeligere å gjette i et automatisert angrep.

WordPress har ingen innebygd bryter for å slå av brukernavn-innlogging, så her trenger du en plugin eller egen kode. Flere gratis plugins gjør nettopp dette, og de finnes i oversikten lenger ned. Vil du heller styre registrering og innlogging mer helhetlig – for eksempel skjule brukernavnfeltet ved registrering – finnes det større medlemsplugins med den typen innstillinger. Uansett hvilken vei du velger, bør du teste grundig med en egen testkonto før du ruller det ut til ekte brukere, slik at du ikke låser deg selv eller andre ute.

Slik slår du av innlogging med e-postadresse

Vil du gjøre det stikk motsatte – kreve at brukere bruker brukernavn og ikke kan logge inn med e-post – trenger du også en plugin, siden dette går imot standardoppførselen. Et vanlig motiv er at flere kontoer deler samme e-postadresse, noe som kan skape tvetydighet ved innlogging. Pluginen «No Login by Email Address» fjerner nettopp muligheten til å logge inn med e-post og endrer samtidig teksten i innloggingsfeltet tilbake til bare «Brukernavn».

Tabellen under sammenligner de mest aktuelle løsningene for å styre innlogging med brukernavn og e-post. Alle lenkene peker til de offisielle pluginsidene på WordPress.org, der du finner oppdatert informasjon om versjon og kompatibilitet før du installerer.

Sammenligning

LøsningHva den gjørPrisOffisiell side
Innebygd i WordPress (4.5+)Lar brukere logge inn med både brukernavn og e-postadresseGratis (del av kjernen)Dokumentasjon på WordPress.org
Force Login With EmailTvinger brukere til å logge inn med e-postadresse i stedet for brukernavnGratiswordpress.org/plugins
No Login by Email AddressSlår av e-postinnlogging og krever brukernavn; endrer feltetikettenGratiswordpress.org/plugins
WP Email or Username LoginLar brukere logge inn med enten e-post eller brukernavn (eldre tillegg)Gratiswordpress.org/plugins
WP Email LoginKlassisk tillegg for e-postinnlogging – stort sett overflødig i dagGratiswordpress.org/plugins

Et generelt råd: Installer aldri flere plugins som gjør motstridende ting med innloggingen samtidig, og sjekk alltid når en plugin sist ble oppdatert. En plugin som ikke har fått oppdateringer på lang tid bør testes ekstra nøye mot din WordPress-versjon.

Brukernavn eller e-postadresse – fordeler og ulemper

Begge innloggingsmåtene har sine styrker, og det fine med standardoppsettet er at brukerne selv velger det som passer dem. Her er de viktigste avveiningene.

Fordeler med e-postadresse: Den er lett å huske fordi folk bruker den overalt, og brukeren slipper å holde styr på et eget brukernavn. For nettbutikker og medlemssider senker det terskelen for å logge inn, noe som kan redusere antallet «glemt passord»-forespørsler.

Ulemper med e-postadresse: E-postadresser endres oftere enn brukernavn (ny jobb, ny leverandør), og hvis adressen i profilen ikke oppdateres, kan brukeren bli låst ute. Deler flere kontoer samme adresse, blir innlogging med e-post tvetydig.

Fordeler med brukernavn: Det er stabilt over tid og uavhengig av hvilken e-postadresse brukeren har til enhver tid. Brukernavn kan dessuten velges fritt og trenger ikke avsløre noe personlig.

Ulemper med brukernavn: Mange glemmer brukernavnet sitt, og i WordPress vises forfatterens brukernavn ofte offentlig i URL-er og arkivsider med mindre du skjuler det. Det gjør brukernavnet til «halve passordet» som angripere allerede kjenner.

Er det trygt å logge inn med e-postadresse?

Innlogging med e-postadresse er like trygt som innlogging med brukernavn – sikkerheten avhenger først og fremst av passordet og eventuell tofaktorautentisering, ikke av hvilket felt du identifiserer deg med. Det finnes likevel noen nyanser verdt å kjenne til.

Et argument for e-post er at brukernavn ofte lekker ut. I mange WordPress-oppsett vises forfatterens brukernavn i adressen til forfatterarkivet, slik at en angriper enkelt kan samle gyldige brukernavn og så prøve å gjette passord (såkalt brute force). E-postadressen er som regel ikke synlig på samme måte, og blir dermed et litt vanskeligere mål.

Samtidig er e-postadresser ofte lettere å gjette enn et tilfeldig brukernavn, fordi folk bruker de samme adressene på mange tjenester. Derfor er ikke valget av innloggingsfelt noen reell sikkerhetsløsning i seg selv. Det som faktisk beskytter deg er sterke, unike passord, en grense for antall innloggingsforsøk, og tofaktorautentisering. Et godt første steg er dessuten å passordbeskytte WordPress-bloggen der det er relevant, og å holde både kjerne, tema og plugins oppdatert.

Vanlige feil å unngå

Når folk roter til innlogging med e-post i WordPress, er det ofte av de samme grunnene. Her er feilene du helst vil styre unna.

  • Å lime inn gammel kode «for sikkerhets skyld». Å legge inn den gamle functions.php-snutten på en moderne WordPress gir ingen gevinst, bare risiko for advarsler og konflikter. Funksjonaliteten finnes allerede.
  • Å bruke avviklede funksjoner. Skal du likevel skrive egen kode, må du bruke get_user_by('email', $email), ikke den avviklede get_user_by_email().
  • Å teste bare med én konto. Lag en egen testbruker når du endrer innloggingsoppførsel, slik at du ikke risikerer å låse deg selv ute fra administratorkontoen.
  • Å blande motstridende plugins. Én plugin som tvinger e-postinnlogging og én som slår den av vil kjempe mot hverandre. Velg én løsning.
  • Å glemme at e-postadressen må være oppdatert. Innlogging med e-post forutsetter at adressen i brukerprofilen faktisk stemmer. Minn brukerne om å oppdatere den når de bytter adresse.
  • Å endre temafiler uten backup. Alt du redigerer direkte i temaet bør gjøres i et underordnet tema (child theme) og med en fersk sikkerhetskopi klar.

Hvem passer de ulike løsningene for?

For de aller fleste nettsteder er det beste valget å gjøre ingenting: Standardoppsettet, der brukerne fritt kan velge brukernavn eller e-post, er fleksibelt og trygt. Driver du en side med mange medlemmer eller kunder – for eksempel en nettbutikk – er dette spesielt gunstig, fordi det reduserer friksjon ved innlogging.

Vil du stramme inn sikkerheten på en side der brukernavn ligger åpent ute, kan det være verdt å tvinge e-postinnlogging. Har du derimot et spesielt oppsett der flere kontoer deler e-postadresse, eller du av andre grunner vil holde på brukernavn, gir det mening å slå av e-postinnlogging. Skal du bygge et større nettsted fra bunnen, kan det lonne seg å tenke gjennom innlogging allerede når du setter opp en WordPress-blogg på eget domene, og mange flere smarte justeringer finner du i vår samling av tips og triks for WordPress-administrasjonen.

Vanlige spørsmål (FAQ)

Må jeg installere en plugin for å logge inn med e-post i WordPress?

Nei. Siden WordPress 4.5 fra april 2016 kan alle brukere logge inn med enten brukernavn eller e-postadresse i det vanlige innloggingsskjemaet, helt uten plugin eller egen kode. Du trenger bare plugin hvis du vil endre denne standardoppførselen.

Virker den gamle functions.php-koden fortsatt?

Den er både unødvendig og utdatert. Koden brukte funksjonen get_user_by_email(), som har vært avviklet siden WordPress 3.3.0. Siden kjernen allerede håndterer e-postinnlogging, bør du fjerne slike snutter i stedet for å legge dem inn.

Hvorfor kan jeg ikke logge inn med e-post på nettstedet mitt?

Nesten alltid fordi noe overstyrer standarden: et egendefinert innloggingsskjema i temaet, en sikkerhets- eller medlemsplugin, eller mellomlagring som viser en gammel side. Test den opprinnelige wp-login.php-siden i et privat vindu for å finne årsaken.

Kan jeg tvinge brukere til å bruke bare e-post eller bare brukernavn?

Ja, men ikke med en innebygd innstilling. Du trenger en plugin: noen tvinger fram e-postinnlogging, mens for eksempel «No Login by Email Address» slår den av. Unngå å kombinere plugins som gjør motstridende ting.

Er det tryggere å logge inn med e-post enn med brukernavn?

Ikke i seg selv. Sikkerheten avhenger av sterke passord, grense for innloggingsforsøk og tofaktorautentisering. Fordelen med e-post er at brukernavn ofte vises offentlig i WordPress, mens e-postadressen som regel er mindre synlig for angripere.