Login
- Write session migration
- Write user migration
- Write user model
- Write session middleware
- Write auth middleware
- Write auth validator
- Write auth service
- Write auth controller
- Write account controller
- Write auth routes
- Write account routes
- Write auth views
- Write account views
Auth Flow
- HTTP request hits express entry point
- Global Middleware runs
- Payload parsed
req.body.username
req.body.password
- Session cookie parse attempted
req.session = null
- setCurrentUser attempted
res.locals.currentUser = null
- Login Route handler runs
app.post("/login", loginController);
- Credentials extracted
const { username, password } = req.body;
- Lookup user in database
const user = await db.find(username);
- Verify password
const isValid = await bcrypt.compare(password, user.passwordHash);
- Authentication success
- User data stored in session table
req.session.userId = user.userId;
- Session cookie generated
- Response sent with session cookie
res.redirect("/account");
- Next request happens
GET /account
Session cookie automatically sent
- HTTP request hits express entry point (starting over)
- Global middleware runs
- Payload parsed if any
- Session cookie parsed
req.session = {userId: 123}
- setCurrentUser
res.locals.currentUser = db.find(userId)
- Route handlers run now with access to
currentUser