SUW15 – v46 – Lösenordskryptering – exempel

Jag har valt att använda Nodes inbyggda crypto-modul, men genomförandet / principen är den samma med andra krypteringsalgoritmer.

Lägg först till ”crypto” bland dina required modules (i app.js i våra exempel).

Jag har därefter valt att skapa en metod ”sha256” i REST-klassen för att generera krypteringen:


sha256(data) { return m.crypto.createHash("sha256").update(data).digest("base64"); }

Metoden behöver nu användas när vi skapar lösenord. Så jag kollar efter ”password” i body när vi registrerar och loggar in.

När vi loggar in jämför vi sedan det postade lösenordet med det lagrade lösenordet. Är det framgångsrikt sparar vi användaren (med krypterat lösenord) till vår session.


register(req, res) { // Nu krypterar vi det inskickade lösenordet: if(req.body.password){ req.body.password = this.sha256(body.password); } // ... här kan vi spara användaren i req.body till databasen (med krypterat lösenord) } login(req, res){ // ... // När vi letar efter en användare i databasen som matchar inloggningen: User.find({ email: req.body.email, password: this.sha256(req.body.password) // <- Så krypterar vi här }, function(err, user){ // ... // om vi inte har err och vi har hittat en user kan vi spara hen i vår session: req.session.user = user[0]; (som då har ett krypterat lösenord (ifrån databasen)) }); }

När vi sedan jämför vår session.user med användaren i databasen jämför vi lösenordet rakt av, eftersom det nu är krypterat både i session och i databasen.


auth(session, callback){ // ... if(session.user){ User.find({ email: session.user.email, password: session.user.password }, function(err, user){ // gör en callback med true om vi hittat användaren, false om vi inte gjort det }); } // har vi ingen session.user måste vi göra callback med false här }

Exempel på användning av auth:


POST(model, params, body, req, res) { this.auth(req.session, function(authenticated){ // ... här har vi testat autentisering och giltighet // ... och skriver till databasen om authenticated är true }); }
0 votes