I got the google auth working with next-auth 4.5.0 and strapi v4, i have done many big and small changes as following:
pages/api/auth/[…nextauth].js
import NextAuth from "next-auth";
import GoogleProvider from "next-auth/providers/google";
const options = {
providers: [
GoogleProvider({
clientId: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
}),
],
database: process.env.NEXT_PUBLIC_DATABASE_URL,
callbacks: {
async session({ session, token, user }) {
session.jwt = token.jwt;
session.id = token.id;
return session;
},
async jwt({ token, user, account }) {
if (user) {
const response = await fetch(
`${process.env.NEXT_PUBLIC_API_URL}/api/auth/google/callback?access_token=${account.access_token}`
);
const data = await response.json();
token.jwt = data.jwt;
token.id = data.user.id;
}
return token;
},
},
};
const Auth = (req, res) => NextAuth(req, res, options);
export default Auth;
.env
NEXT_PUBLIC_API_URL=http://localhost:1337
NEXT_PUBLIC_DATABASE_URL=postgres://5432:5432@localhost:5432/strapi?synchronize=true
NEXTAUTH_URL=http://localhost:3000
GOOGLE_CLIENT_ID="your google client id"
GOOGLE_CLIENT_SECRET="your google client secret"
NEXTAUTH_SECRET=**This should be the JWT_SECRET from backend's .env file**
Use import { signIn } from "next-auth/react";
“instead of next-auth/client”
also i didnt use docker for the backend