feat: update frontend to use cookie session

* use SessionMiddleware in socket.io server
* add back jwtStrategy for commands
This commit is contained in:
wancat committed 2023-09-17 12:14:30 +08:00
1 parent be5cd152a9
commit 34c277c886
13 files changed
+90 -116

No files matched your search

+1 -1
View File
@@ -118,6 +118,6 @@ export function logout(req, res) {
})
return
}
res.json({ message: 'success' })
res.redirect('/login')
})
}
+7 -6
View File
@@ -4,9 +4,9 @@ import sessions from './sessions.js'
import quests from './quests.js'
import commands from './commands.js'
import authRouter from './auth.js'
import authRequired from '../../middleware/authRequired.js'
const router = Router()
router.use(passport.authenticate('session'))
router.get('/', (req, res) => {
res.send('Hello API!')
@@ -15,10 +15,11 @@ router.get('/', (req, res) => {
router.use('/auth', authRouter)
router.use('/quests', quests)
const authZone = Router()
authZone.use('/sessions', sessions)
authZone.use('/commands', commands)
router.use(authZone)
router.use('/sessions', authRequired, sessions)
router.use(
'/commands',
passport.authenticate('jwt', { session: false }),
commands
)
export default router
+11 -20
View File
@@ -1,7 +1,8 @@
import { Server } from 'socket.io'
import { getAndStartContainer, attachContainer } from '../containers/docker.js'
import Session from '../models/session.js'
import { genJWT, verifyJWT } from '../utils/auth.js'
import SessionMiddleware from '../middleware/session.js'
import { genJWT } from '../utils/auth.js'
const sessions = new Map()
@@ -27,6 +28,13 @@ export function pushToSession(sessionId, event, ...args) {
async function connectClient(socket) {
console.log('Connected to the client.')
const user = socket.request.session?.passport?.user
if (!user) {
socket.send('User not found.')
socket.disconnect()
return
}
const sessionId = socket.handshake.query.session_id
if (!sessionId) {
socket.send('Session ID not found.')
@@ -36,7 +44,7 @@ async function connectClient(socket) {
const session = await Session.findOne({
_id: sessionId,
user: socket.user,
user,
status: 'active',
})
if (!session) {
@@ -89,24 +97,7 @@ async function connectClient(socket) {
export default (server) => {
const io = new Server(server)
io.use(async (socket, next) => {
console.log('Authenticating...')
try {
const { token } = socket.handshake.auth
if (!token) {
next(new Error('Token not found.'))
return
}
const user = await verifyJWT(token)
// eslint-disable-next-line no-param-reassign
console.log(user)
socket.user = user
next()
} catch (err) {
console.error(err)
next(err)
}
})
io.engine.use(SessionMiddleware)
io.on('connection', connectClient)
}