Bootcamp i backendutveckling med Node.js · Lektion

Användarregistrering och inloggning

Bygg funktioner för användarregistrering och inloggning, inklusive hashning av lösenord och säker lagring av autentiseringsuppgifter.

Lektion 1 av 611 steg

Användarregistrering och inloggning är en gratis lektion i Bootcamp i backendutveckling med Node.js på CoddyKit. Detta är lektion 1 av 6. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Bootcamp i backendutveckling med Node.js, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Bootcamp i backendutveckling med Node.js innehåller totalt 6 lektioner.

Välkommen till användarautentisering

Användarautentisering är processen där vi verifierar vem en användare är. Det är en viktig del av nästan alla applikationer som hanterar personuppgifter eller begränsade funktioner.

  • Varför det är viktigt: Skyddar användarkonton och känslig information.
  • Detta går vi igenom: Bygga registrerings- och inloggningsflöden från grunden.

Användarregistreringens flöde

Att registrera en ny användare innebär flera steg för att skapa ett nytt konto:

  1. Användaren anger autentiseringsuppgifter (till exempel användarnamn, lösenord och e-postadress).
  2. Indata valideras (till exempel starkt lösenord och unik e-postadress).
  3. Lösenordet hashas av säkerhetsskäl.
  4. Den nya användarens data (inklusive det hashade lösenordet) sparas i databasen.

Varför hasha lösenord?

Att lagra lösenord i klartext är en mycket stor säkerhetsrisk! Om Er databas utsätts för ett intrång skulle alla användares lösenord exponeras.

Hashning omvandlar ett lösenord till en sträng med fast längd som inte går att läsa. Det är en envägsprocess, vilket innebär att det inte går att få tillbaka det ursprungliga lösenordet från hashen på ett enkelt sätt.

Vi använder bibliotek som bcrypt i Node.js för robust lösenordshashning. Biblioteket lägger också till ett ”salt” för att förhindra vanliga attacker.

Hasha lösenord med bcrypt

bcrypt är ett populärt bibliotek för säker hashning av lösenord. Det kräver mycket beräkningskraft, vilket gör brute force-attacker svårare.

Prova att köra detta exempel för att se ett hashat lösenord:

const bcrypt = require('bcrypt');

const password = "mySecretP@ssword";
const saltRounds = 10; // Cost factor for hashing (higher is slower/more secure)

async function hashPassword() {
  try {
    const hashedPassword = await bcrypt.hash(password, saltRounds);
    console.log("Original: " + password);
    console.log("Hashed: " + hashedPassword);
  } catch (error) {
    console.error("Error hashing:" + error.message);
  }
}

hashPassword();

Lagra hashade autentiseringsuppgifter

Efter hashningen ska endast det hashade lösenordet lagras i databasen, tillsammans med andra användaruppgifter som e-postadress eller användarnamn.

  • LAGRA ALDRIG lösenord i klartext.
  • Hashen är unik för varje lösenord, även om de ursprungliga lösenorden är identiska (tack vare saltning).
  • Det är denna hash Ni använder för jämförelse vid inloggning.

Användarinloggningens flöde

När en användare försöker logga in följer applikationen dessa steg:

  1. Användaren anger sitt användarnamn eller sin e-postadress samt sitt lösenord.
  2. Applikationen hämtar användarens post (inklusive det lagrade hashade lösenordet) från databasen utifrån användarnamnet eller e-postadressen.
  3. Det angivna lösenordet hashas och jämförs med den lagrade hashen.
  4. Om de matchar autentiseras användaren och en session eller token skapas.

Verifiera lösenord med bcrypt

För att kontrollera om användarens angivna lösenord motsvarar den lagrade hashen använder vi bcrypt.compare(). Metoden utför hashning och jämförelse på ett säkert sätt.

Kör denna kod för att se lösenordsjämförelsen i praktiken:

const bcrypt = require('bcrypt');

// This hash would typically come from your database
const storedHash = "$2b$10$w090/qB2k6n0Y7o8p9q.u.0Z1X2Y3Z4A5B6C7D8E9F0G1H2I3J4K5L6M7N8O9P0Q1R"; 

const passwordAttempt = "mySecretP@ssword";
const wrongAttempt = "incorrectPassword";

async function comparePasswords() {
  try {
    const isMatch = await bcrypt.compare(passwordAttempt, storedHash);
    console.log(`'${passwordAttempt}' matches: ${isMatch}`);

    const isWrongMatch = await bcrypt.compare(wrongAttempt, storedHash);
    console.log(`'${wrongAttempt}' matches: ${isWrongMatch}`);
  } catch (error) {
    console.error("Error comparing:" + error.message);
  }
}

comparePasswords();

Säker lagring av autentiseringsuppgifter

Utöver lösenord behöver även andra autentiseringsuppgifter skyddas:

  • API-nycklar och databas-URL:er: Lagra dessa i miljövariabler (till exempel .env-filer), inte direkt i koden.
  • Känsliga användardata: Kryptera mycket känsliga data när de lagras i databasen.
  • Regelbundna uppdateringar: Håll Era hashbibliotek och beroenden uppdaterade.

Hantera autentiseringsfel

När registrering eller inloggning misslyckas ska Ni ge användaren hjälpsamma men generella felmeddelanden. Det förhindrar att för mycket information avslöjas för potentiella angripare.

  • Säg ”Ogiltiga autentiseringsuppgifter” i stället för ”Användaren hittades inte”.
  • Säg också ”Ogiltiga autentiseringsuppgifter” i stället för ”Felaktigt lösenord”.
  • Logga detaljerade fel på serversidan för felsökning, men exponera dem inte för klienten.

Snabb kontroll: lösenordshashning

Testa Era kunskaper om varför lösenordshashning är avgörande för säkerheten.

Sammanfattning: registrering och inloggning

I den här lektionen har du lärt dig de grundläggande stegen för användarregistrering och inloggning:

  • Vi gick igenom vikten av lösenordshashning med hjälp av bcrypt för att skydda känsliga användardata.
  • Du såg hur man implementerar både hashning vid registrering och jämförelse vid inloggning.
  • Vi berörde också bästa praxis för säker lagring av autentiseringsuppgifter och hur autentiseringsfel hanteras på ett smidigt sätt.

Nästa steg är att gå igenom hur man implementerar tillståndslös autentisering med JSON Web Tokens (JWT).

Gratis att börja

Lär dig JavaScript med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
22
Lektioner
92

Vanliga frågor

Är lektionen ”Användarregistrering och inloggning” gratis?

Ja – hela texten till ”Användarregistrering och inloggning” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Bootcamp i backendutveckling med Node.js, kan Ni uppgradera till CoddyKit PRO. Kursen i Bootcamp i backendutveckling med Node.js innehåller totalt 6 lektioner.

Vad lär jag mig i ”Användarregistrering och inloggning”?

Bygg funktioner för användarregistrering och inloggning, inklusive hashning av lösenord och säker lagring av autentiseringsuppgifter. Ni övar på Bootcamp i backendutveckling med Node.js med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Bootcamp i backendutveckling med Node.js?

Du behöver inga förkunskaper. Utbildningen i Bootcamp i backendutveckling med Node.js på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 6.

Hur lång tid tar lektionen ”Användarregistrering och inloggning”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Bootcamp i backendutveckling med Node.js-lektionen?

Ja. Varje Bootcamp i backendutveckling med Node.js-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Användarregistrering och inloggning
  2. Generering och validering av JWT-token
  3. JWT för tillståndslös autentisering
  4. Integrera OAuth2:s lösenordsflöde
  5. Rollbaserad åtkomstkontroll
  6. Rollbaserad åtkomstkontroll (RBAC)
← Tillbaka till Bootcamp i backendutveckling med Node.js