Spaces:
Runtime error
Runtime error
import jwt from 'jsonwebtoken' | |
import type { Request } from 'express' | |
import { getCacheConfig } from '../storage/config' | |
import { getUserById } from '../storage/mongo' | |
import { Status } from '../storage/model' | |
const auth = async (req, res, next) => { | |
const config = await getCacheConfig() | |
if (config.siteConfig.loginEnabled) { | |
try { | |
const token = req.header('Authorization').replace('Bearer ', '') | |
const info = jwt.verify(token, config.siteConfig.loginSalt.trim()) | |
req.headers.userId = info.userId | |
const user = await getUserById(info.userId) | |
if (user == null || user.status !== Status.Normal) | |
throw new Error('用户不存在 | User does not exist.') | |
else | |
next() | |
} | |
catch (error) { | |
res.send({ status: 'Unauthorized', message: error.message ?? 'Please authenticate.', data: null }) | |
} | |
} | |
else { | |
// fake userid | |
req.headers.userId = '6406d8c50aedd633885fa16f' | |
next() | |
} | |
} | |
async function getUserId(req: Request): Promise<string | undefined> { | |
try { | |
const token = req.header('Authorization').replace('Bearer ', '') | |
const config = await getCacheConfig() | |
const info = jwt.verify(token, config.siteConfig.loginSalt.trim()) | |
return info.userId | |
} | |
catch (error) { | |
} | |
return null | |
} | |
export { auth, getUserId } | |