feat: guest play — allow singleplayer quiz without auth
- Add optionalAuth middleware: attaches session when present, never blocks (guests pass through) - Make game endpoints (start/answer) accept optional auth - GameSessionStore.userId: string → string | null - Rate limiter falls back to IP for unauthenticated users - Frontend: remove /play route guard, show 'Create account' CTA on score screen for guests - Add tests for guest session creation, answer submission, and cross-user session isolation
This commit is contained in:
parent
d55a1ed648
commit
0118798e36
11 changed files with 298 additions and 32 deletions
|
|
@ -1,7 +1,7 @@
|
|||
import express from "express";
|
||||
import type { Router } from "express";
|
||||
import { createGameController } from "../controllers/gameController.js";
|
||||
import { requireAuth } from "../middleware/authMiddleware.js";
|
||||
import { optionalAuth } from "../middleware/authMiddleware.js";
|
||||
import { gameLimiter } from "../middleware/rateLimiters.js";
|
||||
import type { GameSessionStore } from "../gameSessionStore/index.js";
|
||||
|
||||
|
|
@ -9,11 +9,11 @@ export const createGameRouter = (store: GameSessionStore): Router => {
|
|||
const router = express.Router();
|
||||
const controller = createGameController(store);
|
||||
|
||||
router.use(requireAuth);
|
||||
router.use(optionalAuth);
|
||||
router.use(gameLimiter);
|
||||
|
||||
router.post("/start", controller.createGame as express.RequestHandler);
|
||||
router.post("/answer", controller.submitAnswer as express.RequestHandler);
|
||||
|
||||
|
||||
return router;
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue