Inloggning
Teori
Ett exempel på ett inloggningsförfarande genom webbplats.

Den högra delen är extra information kring säkerhet.
Praktik
Hur ska vi utföra detta.
Node, express och mysql, se tidigare kapitel.
mkdir projektnamn
cd projektnamn
express -v pug -c sass --git
npm install
npm install dotenv mysql
npm install nodemon --save-dev
"start": "nodemon ./bin/www"
Du behöver skapa en route för login, med en tillgörande view. Denna view ska visa ett formulär. Ett formulär består av form taggen, denna kräver en metod(GET eller POST) samt en action. Form elementets action attribut bestämmer vars formuläret skickar data när det skickas(submit).
I form elementet så använder vi olika former av input element för att hantera data från användaren. Här kan en första validering utföras för att öka säkerheten, som typ av fält.
<form method="post" action="/login">
<input type="text" name="username">
<input type="password" name="password">
<button type="submit">Login</button>
</form>
Undersök den data som skickas från ett HTML formulär i webbläsarens utvecklarverktyg. Du hittar denna request under Network fliken.
Tabell för användare
En användartabell behöver inte så mycket för att fungera. I ett mer utökat system så kan vi behöva spara information för email-verifiering och så vidare. Det är god praxis att spara timestamps kopplat till kontot av säkerhetsskäl.
Notera att både användarnamn och email är unika.
mysql> describe users;
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(50) | NO | UNI | NULL | |
| password | varchar(255) | NO | | NULL | |
| email | varchar(255) | NO | UNI | NULL | |
| created_at | timestamp | NO | | NULL | |
| updated_at | timestamp | NO | | NULL | |
+------------+--------------+------+-----+---------+----------------+
Prata med databasen
Sker som tidigare med databasmodellen frĂĄn tidigare kapitel.
SQL och NodeTa emot data
Din login route behöver ta emot och hantera en post request från login formuläret. Den data som routen tar emot sparas i req.body.
router.post('/', async function(req, res, next) {
console.log(req.body);
});
Lösenord
Användaren kommer att skicka sitt lösenord i klartext till din server(ett problem med HTTP som åtgärdats med HTTPS). Det lösenordet är något som vi aldrig ska spara av säkerhetsskäl.
Spara aldrig lösenord i klartext i databasen.
Det som sparas i databasen ska vara en hash, det vill säga en sträng med olika tecken. För att hasha lösenordet används en algoritm som kallas för bcrypt. Bcrypt anses vara säker för detta.
Bcrypt finns som ett node paket.
npm install bcrypt
Förfarandet blir sedan att.
Ta emot användarens lösenord.
Omvandla lösenordet till en hash.
Hämta den sparade hashen av lösenordet från databasen.
Jämföra de två, om det stämmer loggas användaren in.
Bcrypt paketet använder ett par metoder för det, se manualen.
Kom ihåg att jag är inloggad
För detta så använder du sessions eller kakor.
npm install express-session
Konfigurationsanvisningar finns på paketets sida, npmjs.org. För att sätta en session parameter så används request objeketet i express.
req.session.loggedin = true;
if (req.session.loggedin) // inloggad!
Create, read, update, delete
Ett login-system innehåller oftast alla delar av create, read, update, delete(CRUD). CRUD är en akronym för de vanliga operationerna som utförs när data sparas, i ett login-system blir det.
Skapa en användare, create.
Logga in en användare, read.
Uppdatera en användare, update.
Ta bort en användare, delete.
SQL
CRUD kan kopplas till ett antal SQL frågor som utför detta.
SELECT password FROM users WHERE name = name;
INSERT INTO users (name, password) VALUES ('namn', 'pass');
UPDATE users SET namn = 'namnet' WHERE id = 1;
DELETE FROM users WHERE id = 1;
Alla frågorna kan köras genom databasmodellen vi använt och värden bör används med förberedda frågor, det vill säga använda platshållare ? för värden.
HTML
De värden som används i SQL frågorna kommer i de flesta fall från HTML formulär. Formulären låter användare mata in data. Servern tar sedan emot data, validerar, tvättar och gör sedan något med den.
Express
I express tas requesten emot. Formulär visas med GET och data tas emot med POST.
Ă–vningsprojekt
Skapa ett login system.
Låt användaren skriva korta bloggar/inlägg/tweets eller vad det nu kan vara.
Inlägget ska vara kopplat till userns id.
Databasdesignen finns här.
Gör så att en användares inlägg visas på deras "hem" sida.
Andra användare, som är inloggade, ska kunna läsas andras "hem".
Skapa funktionen för att kommentera på andras inlägg.
Bra övning i databasdesign och JOIN i SQL.
Styla slutligen alltihopa med Bootstrap och SASS. Mall.
Repo
Kopiera inte slutprodukten, då lär du dig inget, gå igenom de commits som är gjorda för att se vad du har missat och kan behöva.
Last updated
Was this helpful?