Search code examples
javascripttypescriptwebnext.jsnext-auth

Persisting Error - "Parse Error: Header overflow"


I am working on a Next.js project, in which I have included a login system with NextAuth.

Everything was working fine at the beginning, but recently I keep getting an error every time I try to get the session.

The Error: https://pastebin.com/Mh624N3c

StackOverflow doesn't let me post the whole error, so I had to use Pastebin.

This is the first time I encounter such an error, and I can't seem to be able to find a solution. I am using JWT as the session strategy, if that has to do anything with the issue.

This is the code I use for handling the authentication & session:

await NextAuth(req, res, {
        adapter: MongoDBAdapter(clientPromise),
        pages: {
            signIn: "/login"
        },
        providers: [
            CredentialsProvider({
                name: "credentials",
                credentials: {
                    email: { label: "Email", type: "email", placeholder: "[email protected]" },
                    password: { label: "Password", type: "password" }
                },
                async authorize(credentials, req) {
                    const account = await Accounts.exists(credentials.email)
                    const cryptr = new Cryptr(Config.secret)
                    const encEmail = cryptr.encrypt(credentials.email)
                    const url = process.env.NODE_ENV == "development" ? "http://localhost:3000/" : Config.url
                    
                    if (account) {
                        const password = cryptr.decrypt(account.password)
                        if (credentials.password == password) {
                            return {
                                ...account,
                                _id: null
                            }
                        } else {
                            return res.redirect("/login?error=true")
                        }
                    } else {
                        const code = await Accounts.requestVerification(credentials.email, password)

                        const message = {
                            to: credentials.email,
                            from: "[email protected]",
                            subject: "BytesToBits API - Create Your Account",
                            html: emailStyle(credentials?.email, url, code),
                        }

                        SendGrid.send(message).then(() => console.log("Email Sent"))

                        return res.redirect("/verify?email=" + encEmail)
                    }
                }
            })
        ],
        jwt: {
            secret: Config.secret,
            encryption: true
        },
        secret: Config.secret,
        session: {
            strategy: "jwt"
        },
        callbacks: {
            async jwt({ token, user }) {
                if (user) {
                    token.user = user
                }

                return token
            },
            async session({ session, token }) {

                let data = token.user

                if (data) {
                    if (await Accounts.exists(data.email)) {
                        data.token = await Accounts.getToken(data.email)
                    }
                    data.tokenInfo = await Accounts.tokenInfo(data.token)
                }

                return data
            }
        }
    })

This happens every time I try to fetch the session or authenticate.

When the user authenticates, a session must be formed, which can be fetched from the client for usage. However, whenever I try to authenticate of fetch the session, a "Parse Error: Header overflow" occurs.


Solution

  • I managed to fix the issue! Turns out the Session object was way too long and caused this error.

    Basically in the data's tokenInfo field, it had a really long array. So removing that specific field fixed the issue!