news-analyze/server/api/auth/github.get.ts
2025-05-07 10:53:14 +08:00

17 lines
791 B
TypeScript

import crypto from "node:crypto";
export default defineEventHandler(async (event) => {
const baseUrl = event.node.req.headers.host;
const protocol = process.env.NODE_ENV === "production" ? "https" : "http";
const clientId = process.env.NUXT_GITHUB_CLIENT_ID;
const callbackUrl = `${protocol}://${baseUrl}/api/auth/github/callback`;
const state = crypto.randomBytes(16).toString("hex");
setCookie(event, "oauth_state", state, {
httpOnly: true,
secure: process.env.NODE_ENV === "production",
maxAge: 60 * 10,
path: "/",
});
const authorizationUrl = `https://github.com/login/oauth/authorize?client_id=${clientId}&redirect_uri=${encodeURIComponent(callbackUrl)}&scope=read:user,user:email&state=${state}`;
await sendRedirect(event, authorizationUrl, 302);
});