Skip to content

Commit e7043ba

Browse files
author
Your Name
committed
angular security course
1 parent 2bb0967 commit e7043ba

File tree

5 files changed

+60
-4
lines changed

5 files changed

+60
-4
lines changed

server/create-user.route.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,4 @@ async function createUserAndSession(res:Response, credentials) {
4444

4545

4646

47+

server/get-user.middleware.ts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
2+
3+
4+
import {Request, Response, NextFunction} from 'express';
5+
import {decodeJwt} from "./security.utils";
6+
7+
8+
export function retrieveUserIdFromRequest(req: Request, res: Response, next: NextFunction) {
9+
10+
const jwt = req.cookies["SESSIONID"];
11+
12+
if (jwt) {
13+
handleSessionCookie(jwt, req)
14+
.then(() => next())
15+
.catch(err => {
16+
console.error(err);
17+
next();
18+
})
19+
}
20+
}
21+
22+
23+
24+
async function handleSessionCookie(jwt:string, req: Request) {
25+
try {
26+
27+
const payload = await decodeJwt(jwt);
28+
29+
req["userId"] = payload.sub;
30+
31+
}
32+
catch(err) {
33+
console.log("Error: Could not extract user from request:", err.message);
34+
}
35+
}
36+
37+
38+
39+
40+
41+

server/get-user.route.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11

22

33
import {Request, Response} from "express";
4+
import {db} from "./database";
45

56

67

78
export function getUser(req:Request, res:Response) {
89

9-
//TODO retrieve the actual user based on JWT content
10-
const user = {
11-
email:'test@gmail.com'
12-
};
10+
const user = db.findUserById(req["userId"]);
1311

1412
if (user) {
1513
res.status(200).json(user);

server/security.utils.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,20 @@ export async function createSessionToken(userId:string) {
3030
}
3131

3232

33+
export async function decodeJwt(token:string) {
34+
35+
const payload = await jwt.verify(token, RSA_PUBLIC_KEY);
36+
37+
console.log("decoded JWT payload", payload);
38+
39+
return payload;
40+
}
41+
42+
43+
44+
45+
46+
3347

3448

3549

server/server.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@ import {createUser} from "./create-user.route";
99
import {getUser} from "./get-user.route";
1010
import {logout} from "./logout.route";
1111
import {login} from "./login.route";
12+
import {retrieveUserIdFromRequest} from "./get-user.middleware";
1213
const bodyParser = require('body-parser');
1314
const cookieParser = require('cookie-parser');
1415

1516

1617
const app: Application = express();
1718

1819
app.use(cookieParser());
20+
app.use(retrieveUserIdFromRequest);
1921
app.use(bodyParser.json());
2022

2123

0 commit comments

Comments
 (0)