Labb3
- Inlämningsdatum Inget inlämningsdatum
- Poäng 18
LABBLYDELSEN ÄR PRELIMINÄRT OCH KAN KOMMA ÄNDRAS. SENAST ÄNDRAD:
20230206, KL 17.00
20230207, KL 15.40
20230227, KL 15.47: Det stod "följande två krav" i bonusuppgiften
Sista uppdatering av sidan var tisdag den 7:e februari kl 15.40: Uppdaterade text har samma bakgrundsfärg som meningen du precis läst klart.
Inloggningssekvens med databas
Basuppgift
Översikt
I den här labben ska du skapa en webbserver med Node.js samt en simpel webbsida, där nya användare kan registrera sig för att skapa ett konto samt registrerade användare kan logga in på sina egna konton. Webbsidan ska bestå av en inloggnings-/registreringssida samt en profilsida för lyckade inloggningar. Ni kommer att förses med simpla kopior av båda dessa sidor som en del av labbskelettet.
Labbskelett
Labbskelettet består bland annat av dessa filer:
README.md
Den här filen förväntas ni läsa då den innehåller information om hur du får skelettet att köra.package.json
Den här filen berättar förnpm
att mappen innehåller ett javascript project, vilka beroenden projektet har, samt hur projektet startas.src/base/index.js
Den här filen är webbserverns ingångspunkt och kommer att vara den fil som körs först.public/
Den här mappen innehåller de statiska filer som kommer att serveras avserver.js
.
Specifika krav
- Filer (/public mappen)
- Ni skall använda filerna i public mappen för login samt profil sidorna.
- Filerna i public får INTE ändras.
- Lintning.
- Ni skall använda de medföljande lint-skripten (package.json filen) utan modifikation. Vid redovisning ska dessa kunna köras UTAN NÅGRA VARNINGAR ELLER FEL.
- Databas.
- Databasen SQLite skall användas. Skelettet kommer med ett exempel skrivet i
sqlite
Links to an external site. som använder prepared statements. Se till att ni förstår exemplet innan ni går vidare. - Alla queries skall vara säkra mot SQL injections.
- Alla registrerade användare skall sparas i databasen.
- Inloggning skall enbart tillåtas om det angivna användarnamnet och lösenordet finns registrerat i databasen.
- Registrering av ett upptaget användarnamn skall inte vara tillåtet.
- Användarnamn samt lösenord måste vara minst 3 tecken långa samt innehålla minst en bokstav och en siffra.
- Databasen SQLite skall användas. Skelettet kommer med ett exempel skrivet i
- Inloggning.
- Vid lyckad inloggning:
- Inloggningssession skall skapas och associerad kaka skall skickas till användaren. Redan inloggade användare ska hamna på profilsidan oavsett handling (t.ex uppdatering av sidan ändra url till login-sidan etc) med undantag för utloggning se punkt 5.3.2 nedan.
- Användaren skall bli omderigerad till dess profilsidan.
- Vid misslyckad inloggning:
- Användaren skall bli omderigerad till inloggningssidan igen, fast med ett felmeddelande.
- Vid lyckad inloggning:
- Utloggning.
- Det skall finnas en utloggningsknapp på profil sidan.
- Utloggning skall enbart tillåtas för inloggad användare.
- Vid lyckad utloggning:
- Inloggningssessionen skall tas bort, samt assosierad kaka skall invalideras.
- Användaren skall bli omdirigerad till inloggningssidan.
- Säkerhet.
- Det skall finnas ett middelware Links to an external site. på serversidan som hindrar ej inloggade användare från att få tillgång till profilsidan, samt omdirigerar användaren till inloggningssidan.
Referenser
Node.js: https://nodejs.org/en/ Links to an external site.
Express.js: https://expressjs.com/ Links to an external site.
SQLite: https://www.npmjs.com/package/sqlite Links to an external site.
Bonusuppgift 3X
Alla krav i basuppgiften samt följande två krav måste uppfyllas:
- SLO (Single Logout)
Förutom utloggningsknappen från grunduppgiften på profilsidan ska det finnas även en länk för att logga ut ALLA ANDRA aktiva sessioner associerade med samma konto (t.ex sessioner som finns kvar när man loggade in från andra datorer/webbläsare och glömt logga ut). Det vill säga rofilsida som tillhör den absolut första sessionen ska inte att ha en sådant länk som kan logga ut alla andra. Men de senare sessionerna ska ha en länk på profilsidan som via länken kan logga ut alla andra men inte sig själv. Länken ska försvinna UTAN ATT HELA profilsidan uppdateras, detta är möjligt med AJAX-teknik. (genomgång av AJAX kommer att finnas på föreläsningarna) - Passive sessionsinvalidering
- Inloggningssessionen skall invalideras automatiskt efter en viss tid från senaste interaktion med servern (ni får välja tiden, förslagsvis 10 sekunder, för att underlätta redovisning av labben).
- Säkerhet.
- Lösenorden som lagras i databasen skall Hash:as sam saltas med BCrypt. Links to an external site.Dvs lösenord får inte lagras i klartext.
- Var redo på att besvara frågor gällande varför hash:ning och saltning är nödvändigt för lösenordssäkerhet.
Matris
Kriterier | Bedömningar | Poäng |
---|---|---|
Description of criterion
tröskel:
poäng
|
poäng
--
|