TypeError: res.setHeader is not a function
at strategy.redirect (webpack-internal:///(rsc)/./node_modules/passport/lib/middleware/authenticate.js:322:21)
at stored (webpack-internal:///(rsc)/./node_modules/passport-oauth2/lib/strategy.js:285:22)
at NullStore.store (webpack-internal:///(rsc)/./node_modules/passport-oauth2/lib/state/null.js:3:5)
at OAuth2Strategy.authenticate (webpack-internal:///(rsc)/./node_modules/passport-oauth2/lib/strategy.js:296:38)
at attempt (webpack-internal:///(rsc)/./node_modules/passport/lib/middleware/authenticate.js:353:22)
at authenticate (webpack-internal:///(rsc)/./node_modules/passport/lib/middleware/authenticate.js:354:11)
at eval (webpack-internal:///(rsc)/./app/api/auth/[provider]/route.js:55:11)
at new Promise ()
at authenticate (webpack-internal:///(rsc)/./app/api/auth/[provider]/route.js:46:42)
at Array.eval (webpack-internal:///(rsc)/./app/api/auth/[provider]/route.js:61:28)
at next (webpack-internal:///(rsc)/./node_modules/next-connect/dist/esm/router.js:67:34)
at Array.initialize (webpack-internal:///(rsc)/./node_modules/passport/lib/middleware/initialize.js:86:9)
at Router.exec (webpack-internal:///(rsc)/./node_modules/next-connect/dist/esm/router.js:68:22)
at EdgeRouter.run (webpack-internal:///(rsc)/./node_modules/next-connect/dist/esm/edge.js:47:63)
at GET (webpack-internal:///(rsc)/./app/api/auth/[provider]/route.js:106:23)
at /home/mason/project/epubpub/nextjs/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:6:63257
at /home/mason/project/epubpub/nextjs/node_modules/next/dist/server/lib/trace/tracer.js:133:36
`import passport from "passport";
import { Strategy as GitHubOAuth2Strategy } from "passport-github";
import { OAuth2Strategy as GoogleOAuth2Strategy } from "passport-google-oauth";
TypeError: res.setHeader is not a function at strategy.redirect (webpack-internal:///(rsc)/./node_modules/passport/lib/middleware/authenticate.js:322:21) at stored (webpack-internal:///(rsc)/./node_modules/passport-oauth2/lib/strategy.js:285:22) at NullStore.store (webpack-internal:///(rsc)/./node_modules/passport-oauth2/lib/state/null.js:3:5) at OAuth2Strategy.authenticate (webpack-internal:///(rsc)/./node_modules/passport-oauth2/lib/strategy.js:296:38) at attempt (webpack-internal:///(rsc)/./node_modules/passport/lib/middleware/authenticate.js:353:22) at authenticate (webpack-internal:///(rsc)/./node_modules/passport/lib/middleware/authenticate.js:354:11) at eval (webpack-internal:///(rsc)/./app/api/auth/[provider]/route.js:55:11) at new Promise ()
at authenticate (webpack-internal:///(rsc)/./app/api/auth/[provider]/route.js:46:42)
at Array.eval (webpack-internal:///(rsc)/./app/api/auth/[provider]/route.js:61:28)
at next (webpack-internal:///(rsc)/./node_modules/next-connect/dist/esm/router.js:67:34)
at Array.initialize (webpack-internal:///(rsc)/./node_modules/passport/lib/middleware/initialize.js:86:9)
at Router.exec (webpack-internal:///(rsc)/./node_modules/next-connect/dist/esm/router.js:68:22)
at EdgeRouter.run (webpack-internal:///(rsc)/./node_modules/next-connect/dist/esm/edge.js:47:63)
at GET (webpack-internal:///(rsc)/./app/api/auth/[provider]/route.js:106:23)
at /home/mason/project/epubpub/nextjs/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:6:63257
at /home/mason/project/epubpub/nextjs/node_modules/next/dist/server/lib/trace/tracer.js:133:36
`import passport from "passport"; import { Strategy as GitHubOAuth2Strategy } from "passport-github"; import { OAuth2Strategy as GoogleOAuth2Strategy } from "passport-google-oauth";
//import api from "@/api";
const SUPPORTED_PROVIDERS = ["google", "github"]; import { NextResponse } from "next/server";
import { createEdgeRouter } from "next-connect";
passport.use( new GitHubOAuth2Strategy( { clientID: process.env.GITHUB_CLIENT_ID ?? "", clientSecret: process.env.GITHUB_CLIENT_SECRET ?? "", callbackURL: process.env.GITHUB_CALLBACKURL ?? "", scope: ["user:email"], }, (accessToken, , profile, cb) => { return cb(null, { accessToken, profile }); } ) ); passport.use( new GoogleOAuth2Strategy( { clientID: process.env.GOOGLE_CLIENT_ID ?? "", clientSecret: process.env.GOOGLE_CLIENT_SECRET ?? "", callbackURL: process.env.GOOGLE_CALLBACKURL ?? "", scope: "profile email", }, (accessToken, , profile, cb) => { return cb(null, { accessToken, profile }); } ) );
const authenticate = (method, req, res) => new Promise((resolve, reject) => { passport.authenticate(method, { session: false }, (error, token) => { if (error) { reject(error); } else { resolve(token); } })(req, res); });
const router = createEdgeRouter();
router.use(passport.initialize()).get(async (req, res) => { const { provider } = res.params; try { const user = await authenticate(provider, req, res); return NextResponse.json({ user }); } catch (error) { console.error(error); return NextResponse.json(error.message, { status: 401 }); } });
export async function GET(req, ctx) { // Validate provider const { provider } = ctx.params;
if (typeof provider !== "string") { return Response.json( { success: false, error: "Invalid OAuth2 provider.", }, { status: 400, } ); } if (!SUPPORTED_PROVIDERS.includes(provider)) { return Response.json( { success: false, error:
${provider} is not a supported OAuth2 provider.
, }, { status: 400, } ); }// Check if we're already logged in // const user = await api.me(req, res); // if (user.success && user?.payload) { // // If User hasn't completed account creation then redirect // if (user.payload.user?.state !== "COMPLETE") { // res.redirect("/profile"); // return; // } // res.redirect("/"); // return; // }
try { const opts = { session: false, };
} catch (err) { console.error(err); return Response.json( { success: false, error:
Failed to authenticate with ${provider}. Please try again later.
, }, { status: 500, } ); } } `