server/src/middleware/Authentication.ts

37 lines
1.0 KiB
TypeScript

// socket io jwt auth middleware
import { verify } from 'jsonwebtoken'
import { TSocket } from '../utilities/Types'
import config from '../utilities/Config'
import UserRepository from '../repositories/UserRepository'
import { User } from '@prisma/client'
export async function Authentication(socket: TSocket, next: any) {
if (!socket.request.headers.cookie) {
console.log('No cookie provided')
return next(new Error('Authentication error'))
}
const cookies = socket.request.headers.cookie.split('; ').reduce((prev: any, current: any) => {
const [name, value] = current.split('=')
prev[name] = value
return prev
}, {})
const token = cookies['token']
if (token) {
verify(token, config.JWT_SECRET, async (err: any, decoded: any) => {
if (err) {
console.log('err')
return next(new Error('Authentication error'))
}
socket.user = (await UserRepository.getById(decoded.id)) as User
next()
})
} else {
console.log('No token provided')
next(new Error('Authentication error'))
}
}