# Skapa en middelwer som bara tillåter inloggade personer
*
author: krm
created: 2022-05-22
status: alpha
*

# 👁️‍🗨️ Om detta avsnitt

Du har skapat ett sätt att komma in på sidan. Gör nu så att detta krävs 
inloggning på alla sidor. För detta behöver vi ett middelware.

- 🦉 [Låt en användare logga in](./let-a-user-logg-in.sv.html)
 
# 1. Deklarera ett midelware

Först deklarerar vi en funktion. Detta ska göra i main funktionen efter 
objektet som används för att lagra tokens.

```js
function isLoggedIn(req:any, res:any, next:any) {
// CODE
}
```
# 2. Hämta användaren som motsvaras av kaka

Vi ska börja med att titta i kakan *login* och se vilken användare 
detta motsvarar.

```js
    let token = req.cookies.login??"";
    let user = token_storage[token];
```

Observera att om toknet inte finns så kommer user få värdet  
*undefined*.

# 3. Kontrollera att användaren blivit inloggad

Vi kontollerar nu att user verkligen finns. Om så är fallet forsätter 
server med att se vad som ska göras härnäst med anropet.

```js
    if(user) {
      next()
    }
```

# 4. Om användare inte är inloggad.

Om det inte är så, då ska användare få ett meddelande om att den borde 
logga in.

```sh
else {
      res.status(401).send("Not allowed");
      console.error("Not allowed");
    }
```

# 5. Registrera middelware

Registera denna som ett midelware på path som ska kräver inloggning.

```sh
app.use("/secret/", isLoggedIn);
```

# ✔️ 6. Skapa ett enkelt medelande som användaren måste logg in för att se

Gör en get funktion som är kopplat till pathen ovan. Det krävs nu 
ionlogg för att kunna läsa den.

```sh
  app.get("/secret/test", function (req, res) {
    res.send("Hello World!");
  });
```

Tänk på att get funktion måste anropas efter midelwaret ovan.

# 7. ✔️ Starta om servern och testa anropet

Starta om server och gå in på sidan. Försök sedan logga in.

- 🔗 [Försök gå in occh bli avspisat](http://localhost:3000/secret/test)
- 🔗 [Logga in](http://localhost:3000/login.html)
- 🔗 [Och nu kommer du in på sidan!](http://localhost:3000/secret/test)
