hoangvvo / next-connect

The TypeScript-ready, minimal router and middleware layer for Next.js, Micro, Vercel, or Node.js http/http2
https://www.npmjs.com/package/next-connect
MIT License
1.62k stars 65 forks source link

"Login sessions require session support. Did you forget to use `express-session` middleware?" #195

Closed Turtlepaw closed 2 years ago

Turtlepaw commented 2 years ago

I'm using passport-discord 0.1.4, next v12.1.5-canary.7, and next-connect 0.12.2

This is my API route:

// api/oauth/discord
import nc from "next-connect";
import passport from "passport";
import { Strategy as DiscordStrategy } from "passport-discord";
import { findOrCreate, findWithConnection } from "../../../../utils/db";
import { ConnectionNames } from "../../../../utils/entities/user";
import { Avatar } from "../../../../utils/utils";
import OAuth2Strategy, { VerifyCallback } from "passport-oauth2";
import { NextApiRequest, NextApiResponse } from "next";

passport.use(
  new DiscordStrategy(
    {
      clientID: process.env.CLIENT_ID,
      clientSecret: process.env.CLIENT_SECRET,
      callbackURL: 'http://localhost:3000/api/oauth/discord'
    }, function (accessToken: string, refreshToken: string, params: any, profile: DiscordStrategy.Profile, done: VerifyCallback) {
      const user = findWithConnection({
        provider: ConnectionNames.Discord,
        Id: profile.id,
        avatarURL: Avatar.from(profile.avatar, profile.id),
        email: profile.email,
        username: profile.username
      });

      done(null, user);
    }
  )
)

const handler = nc<NextApiRequest, NextApiResponse>()
  .get(passport.authenticate('discord', {
    scope: ['identify', 'email'],
  }), (req, res) => {

  })

export default handler;

When I go to /api/oauth/discord and authorize using Discord, I get this error (not from discord but my site):

Login sessions require session support. Did you forget to use `express-session` middleware?
hoangvvo commented 2 years ago

You need to use express-session as the message says. Check out https://github.com/hoangvvo/nextjs-mongodb-app for an integration with passport.

Turtlepaw commented 2 years ago

Ok 👍