Next.js Discord

Discord Forum

how to get accessToken, refreshToken from firestore(fb and google signin) firebase adapter next-aut

Unanswered
Belgian Hare posted this in #help-forum
Open in Discord
Belgian HareOP
Hello I have setup of firebase adapter + next-auth in my nextjs app. its credentialprovider, fb, google. Credential provider works fine, but with fb, and google I don't get the accessToken and refreshToken. Anyway I can get it without using react-firebase-hooks? [...next-auth].js

In firebase, users that signedin through fb and google are stored in firestore database

[...next-auth].js below:

1 Reply

Belgian HareOP
[...next-auth].js:

export default NextAuth({
  session: {
    strategy: 'jwt',
  },
  providers: [
CredentialsProvider({
  name: 'Credentials',
  credentials: {},
  async authorize(credentials) {
    try {
      const userCredential = await signInWithEmailAndPassword(auth, credentials.email || '', credentials.password || '');

      if (userCredential.user) {
        const accessToken = userCredential.user.stsTokenManager.accessToken;
        const refreshToken = userCredential.user.stsTokenManager.refreshToken;
        const displayName = userCredential.user.displayName;
        const email = userCredential.user.email;
        const user_id = userCredential.user.reloadUserInfo.localId;
        var tokenExpire =  Date.now() + 1 * 50000;
        return {
          user: {
            user_id: user_id,
            token: accessToken,
            refreshToken: refreshToken,
            name: displayName,
            email: email,
            tokenExpire: tokenExpire,
          }
        };
      }
      return null;
    } catch (error) {
      console.log(error);
      return null;
    }
  }
}),
    GoogleProvider({
      clientId: process.env.GOOGLE_CLIENT_ID,
      clientSecret: process.env.GOOGLE_CLIENT_SECRET,
    }),
    FacebookProvider({
      clientId: process.env.FACEBOOK_CLIENT_ID,
      clientSecret: process.env.FACEBOOK_CLIENT_SECRET,
    })
  ],
  adapter: FirestoreAdapter({
    credential: cert({
      projectId: '',
      clientEmail: "",
      privateKey:  "",
    }),
  }),
  secret: process.env.NEXTAUTH_SECRET,
  callbacks: {
    async session({ session, token }) {
      session.user = token.user;
      console.log('sessssion', session);
      return session;
    },
    async jwt({ token, user }) {
      console.log('token user', token, user;
      if (user) {
        token.user = user;
        return token;
      }
      return token
    },
  },
})