Enkel Innloggingsdemo
Ut ifra det vi nå har lært om Pug Templating og Express, skal vi lage en enkel demo for innlogging. Vi kommer til å se på hvordan vi sender data mellom Frontend og Backend med ulike HTTP Metoder. Merk at alt som skjer på Frontend er synlig for endebruker, det er ikke Backend. Man kan altså behandle data som passord på Frontend, men det er ikke så lurt!
Verdt å merke så er dette IKKE en sikker måte å gjøre ting på, men det synliggjør mer avanserte problemstillinger vi må ta henhold til senere.
Sett opp en Login side (GET-metode)
I vår app.js
må vi legge inn en ny side hvor vår app lytter på GET forespørsler til en ny side, /login
, som viser innholdet i en ny Pug vi lager, views/login.pug
. Innholdet må være et skjema som sender vår innloggingsinformasjon tilbake til vår Express Backend. Dette gjøres i form av et HTML <form>
(W3schools - HTML Forms).
app.js
Merk at render('login')
refererer til views/login.pug
.
login.pug
Dette vil generere en HTML side med 2 tekstfelt og en “Logg inn” knapp. Skjemaet bruker parametrene (action="/auth" method="get")
, som sier noe om hvordan skjema-dataen vil bli behandlet. I dette tilfelle vil den generere og gå til en lenke: /auth?name=value&name2=value2
. Vi bruker 2 ulike name
verdier, username
og password
. value
kommer av hva bruker har skrevet inn.
Skriver vi derfor inn 123 som brukernavn, 456 som passord, vil den sende oss til: /auth?username=123&password=456
For å håndtere dataen videre, må vi validere at det er brukt riktig brukernavn og passord. Dette gjør vi ved å sette opp en til GET funksjon som lytter på /auth
i app.js
, siden vårt skjema bruker method="get"
.
Verdiene vi får legger seg automatisk inn i request
objektet som tas inn i funksjonen, under et underobjekt som heter query
(forespørsel). For testen sin skyld bruker vi brukernavnet: Ole
og passord: 123
app.js
POST metode
Nå har vi sett på GET metoden for å sende data, som legger inn dataen direkte i URL’en, ?nøkkel=verdi&nøkkel2=verdi2&nøkkel3=verdi3
. Nå skal vi se på POST metoden, som sender dataen “bak kulissene”.
For å benytte oss av POST, bytter vi bare ut form(method="get")
med form(method="post")
:
login.pug
For å kunne lese post
forespørsler er vi nødt til å definere at vi leser post
forespørsler i JSON format - dette gjør vi ved å legge inn følgende kommando, der hvor vi definerer 'view engine', 'pug'
:
I app.js
må vi også endre fra get
til post
forespørsler. Det er heller ikke verre enn å bytte ut .get()
med .post()
- forskjellen her blir bare hvor vi henter verdiene fra. Nå kommer de ikke fra forespørselen (Query), men fra en annen usynlig forespørsel med innhold. Nettleseren sender altså et brev (post) av innhold bak kulissene, og det som blir lest av er body
delen av brevet, som på norsk kan oversettes til innhold. request.query
(URL, GET) blir derfor byttet ut med request.body
(POST)
app.js
Tips
Hvis man vil unngå å måtte skille mellom små og store bokstaver, så kan man bruke .toLowerCase()
funksjonen. Merk at brukernavnet må da også lagres med små bokstaver.