Public Access
27 lines
680 B
TypeScript
27 lines
680 B
TypeScript
import jwt from 'jsonwebtoken'
|
|
import crypto from 'crypto'
|
|
import { config } from '../config.js'
|
|
|
|
export interface JwtPayload {
|
|
userId: number
|
|
email: string
|
|
displayName: string
|
|
role: 'user' | 'admin'
|
|
}
|
|
|
|
export function signToken(payload: JwtPayload): string {
|
|
return jwt.sign(payload, config.jwtSecret, { expiresIn: '24h' })
|
|
}
|
|
|
|
export function verifyToken(token: string): JwtPayload {
|
|
return jwt.verify(token, config.jwtSecret) as JwtPayload
|
|
}
|
|
|
|
export function generateVerificationToken(): string {
|
|
return crypto.randomBytes(32).toString('hex')
|
|
}
|
|
|
|
export function hashToken(token: string): string {
|
|
return crypto.createHash('sha256').update(token).digest('hex')
|
|
}
|