Next.js Discord

Discord Forum

Trying to only fetch user guild data once upon authentication

Unanswered
Atlantic menhaden posted this in #help-forum
Open in Discord
Atlantic menhadenOP
I had my user guild fetch function inside a component which would rerun the fetch upon every refresh or mount. I tried adding it to the session callback but it achieves the same outcome. I'm a big of a beginner so if anyone could help that would be great.

import NextAuth from 'next-auth';
import DiscordProvider from 'next-auth/providers/discord';
import axios from 'axios'

export default NextAuth({
  providers: [
    DiscordProvider({
      clientId: process.env.DISCORD_CLIENT_ID,
      clientSecret: process.env.DISCORD_CLIENT_SECRET,
      authorization: { params: { scope: 'identify guilds email' } },
    }),
  ],
  callbacks: {
    async jwt({ token, account }) {
      if (account) {
        token.accessToken = account.access_token;
      }
      return token
    },
    async session({ session, token }) {
      session.accessToken = token.accessToken;
      console.log(session)
      if (session.user.guilds) {
        return session;
      } else {
        try {
          const result = await axios({
            url: 'https://discord.com/api/v10/users/@me/guilds',
            method: 'GET',
            headers: {
              Authorization: `Bearer ${token.accessToken}`,
            },
          })
          session.user.guilds = result.data;
        } catch (err) {
          session.user.guilds = [];
        }
        return session;
      }
    },
  },
})

1 Reply

Atlantic menhadenOP
i'm pretty sure i just need to move it all up to jwt callback