next/server/middleware/05.currentUser.ts

27 lines
914 B
TypeScript

import jwt from "jsonwebtoken";
import { User } from "@models/user";
import { messages } from "@server/constants";
import { AccessToken } from "@models/oauth";
export default defineEventHandler(async (event) => {
let ahead = (getHeaders(event).authorization || getCookie(event, "auth:token") || "")?.replace("Bearer ", "");
if (ahead) {
let toktok: jwt.JwtPayload;
try {
toktok = jwt.verify(ahead, useRuntimeConfig().jwt) as jwt.JwtPayload;
let user = await User.findById(toktok.id as number).exec();
if (user && toktok) event.context.currentUser = user;
} catch (e) {
const t = await AccessToken.findOne({ token: ahead });
if (!t)
throw createError({
statusCode: 401,
message: messages[401],
});
let user = await User.findById(t.userID);
if (user) event.context.currentUser = user;
// else throw createError({statusCode: 401, message: messages[401]})
}
}
});