Sfoglia il codice sorgente

Create user auth.
Create get user route.

Lee Morgan 1 anno fa
parent
commit
224f96b38c
4 ha cambiato i file con 58 aggiunte e 2 eliminazioni
  1. 34 0
      auth.js
  2. 8 1
      controllers/user.js
  3. 11 0
      documentation/bruno/User/Get.bru
  4. 5 1
      routes/user.js

+ 34 - 0
auth.js

@@ -0,0 +1,34 @@
+import User from "./models/User.js";
+
+import {HttpError, catchError} from "./HttpError.js";
+import jwt from "jsonwebtoken";
+
+const userAuth = async (req, res, next)=>{
+    try{
+        const userData = jwt.verify(req.signedCookies.userToken, process.env.JWT_SECRET);
+        
+        const user = await User.findOne({_id: userData.id});
+        if(!user || user.uuid !== userData.token){
+            throw new HttpError(401, "Unauthorized");
+        }
+
+        res.locals.user = user;
+        next();
+    }catch(e){
+        if(e.message === "Cannot read properties of undefined (reading 'split')"){
+            const error = new CustomError(400, "Must provide authorization token");
+            catchError(error, req, res, next);
+            return;
+        }
+
+        if(e.message === "jwt malformed"){
+            const error = new CustomError(400, "Invalid JWT");
+            catchError(error, req, res, next);
+            return;
+        }
+
+        catchError(e, req, res, next);
+    }
+}
+
+export {userAuth}

+ 8 - 1
controllers/user.js

@@ -33,6 +33,12 @@ const logoutRoute = async (req, res, next)=>{
     }catch(e){next(e)}
     }catch(e){next(e)}
 }
 }
 
 
+const getRoute = async (req, res, next)=>{
+    try{
+        res.json(res.locals.user);
+    }catch(e){next(e)}
+}
+
 /*
 /*
  Create a new User object
  Create a new User object
  @param {Object} - Request body with user data
  @param {Object} - Request body with user data
@@ -122,5 +128,6 @@ const createUuid = ()=>{
 export {
 export {
     createRoute,
     createRoute,
     loginRoute,
     loginRoute,
-    logoutRoute
+    logoutRoute,
+    getRoute
 }
 }

+ 11 - 0
documentation/bruno/User/Get.bru

@@ -0,0 +1,11 @@
+meta {
+  name: Get
+  type: http
+  seq: 3
+}
+
+get {
+  url: http://localhost:8000/user
+  body: none
+  auth: none
+}

+ 5 - 1
routes/user.js

@@ -1,11 +1,15 @@
 import {
 import {
     createRoute,
     createRoute,
     loginRoute,
     loginRoute,
-    logoutRoute
+    logoutRoute,
+    getRoute
 } from "../controllers/user.js";
 } from "../controllers/user.js";
 
 
+import {userAuth} from "../auth.js";
+
 export default (app)=>{
 export default (app)=>{
     app.post("/user", createRoute);
     app.post("/user", createRoute);
     app.put("/user/login", loginRoute);
     app.put("/user/login", loginRoute);
     app.get("/user/logout", logoutRoute);
     app.get("/user/logout", logoutRoute);
+    app.get("/user", userAuth, getRoute);
 }
 }