I have implemented auth js in next js project.I also split the config like auth.js and auth.config.js.
now for the signIn functionality, If I add mongoClient to my auth.config.js, I am getting edge runtime error
how can I solve this???
bellow is my code-
<code>//auth.config.js
import { NextAuthConfig } from "next-auth";
import Credentials from "next-auth/providers/credentials";
// import { getUserFromDB } from "./lib/db-utils";
const authConfig = {
providers: [
Credentials({
credentials: {
email: {},
password: {},
},
authorize: async (credentials) => {
let user = null;
// user = await getUserFromDB(credentials.email);
if (user) {
const isPasswordValid = bcrypt.compareSync(
credentials.password,
user.password
);
if (isPasswordValid) {
return { name: user.name, email: user.email };
}
}
// If user is not found or password is invalid, return null
throw new Error("Invalid credentials");
},
}),
],
};
export default authConfig;
</code>
<code>//auth.config.js
import { NextAuthConfig } from "next-auth";
import Credentials from "next-auth/providers/credentials";
// import { getUserFromDB } from "./lib/db-utils";
const authConfig = {
providers: [
Credentials({
credentials: {
email: {},
password: {},
},
authorize: async (credentials) => {
let user = null;
// user = await getUserFromDB(credentials.email);
if (user) {
const isPasswordValid = bcrypt.compareSync(
credentials.password,
user.password
);
if (isPasswordValid) {
return { name: user.name, email: user.email };
}
}
// If user is not found or password is invalid, return null
throw new Error("Invalid credentials");
},
}),
],
};
export default authConfig;
</code>
//auth.config.js
import { NextAuthConfig } from "next-auth";
import Credentials from "next-auth/providers/credentials";
// import { getUserFromDB } from "./lib/db-utils";
const authConfig = {
providers: [
Credentials({
credentials: {
email: {},
password: {},
},
authorize: async (credentials) => {
let user = null;
// user = await getUserFromDB(credentials.email);
if (user) {
const isPasswordValid = bcrypt.compareSync(
credentials.password,
user.password
);
if (isPasswordValid) {
return { name: user.name, email: user.email };
}
}
// If user is not found or password is invalid, return null
throw new Error("Invalid credentials");
},
}),
],
};
export default authConfig;
<code>//auth.js
import NextAuth from "next-auth";
import authConfig from "./auth.config";
import { MongoDBAdapter } from "@auth/mongodb-adapter";
import clientPromise from "./lib/db";
export const { handlers, auth, signIn, signOut } = NextAuth({
adapter: MongoDBAdapter(clientPromise),
session: { strategy: "jwt" },
...authConfig,
});
</code>
<code>//auth.js
import NextAuth from "next-auth";
import authConfig from "./auth.config";
import { MongoDBAdapter } from "@auth/mongodb-adapter";
import clientPromise from "./lib/db";
export const { handlers, auth, signIn, signOut } = NextAuth({
adapter: MongoDBAdapter(clientPromise),
session: { strategy: "jwt" },
...authConfig,
});
</code>
//auth.js
import NextAuth from "next-auth";
import authConfig from "./auth.config";
import { MongoDBAdapter } from "@auth/mongodb-adapter";
import clientPromise from "./lib/db";
export const { handlers, auth, signIn, signOut } = NextAuth({
adapter: MongoDBAdapter(clientPromise),
session: { strategy: "jwt" },
...authConfig,
});
<code>//db.js
import { MongoClient, ServerApiVersion } from "mongodb"
if (!process.env.MONGODB_URI) {
throw new Error('Invalid/Missing environment variable: "MONGODB_URI"')
}
const uri = process.env.MONGODB_URI
const options = {
serverApi: {
version: ServerApiVersion.v1,
strict: true,
deprecationErrors: true,
},
}
let client
let clientPromise
if (process.env.NODE_ENV === "development") {
// In development mode, use a global variable so that the value
// is preserved across module reloads caused by HMR (Hot Module Replacement).
let globalWithMongo = global
if (!globalWithMongo._mongoClientPromise) {
client = new MongoClient(uri, options)
globalWithMongo._mongoClientPromise = client.connect()
}
clientPromise = globalWithMongo._mongoClientPromise
} else {
// In production mode, it's best to not use a global variable.
client = new MongoClient(uri, options)
clientPromise = client.connect()
}
// Export a module-scoped MongoClient promise. By doing this in a
// separate module, the client can be shared across functions.
export default clientPromise
</code>
<code>//db.js
import { MongoClient, ServerApiVersion } from "mongodb"
if (!process.env.MONGODB_URI) {
throw new Error('Invalid/Missing environment variable: "MONGODB_URI"')
}
const uri = process.env.MONGODB_URI
const options = {
serverApi: {
version: ServerApiVersion.v1,
strict: true,
deprecationErrors: true,
},
}
let client
let clientPromise
if (process.env.NODE_ENV === "development") {
// In development mode, use a global variable so that the value
// is preserved across module reloads caused by HMR (Hot Module Replacement).
let globalWithMongo = global
if (!globalWithMongo._mongoClientPromise) {
client = new MongoClient(uri, options)
globalWithMongo._mongoClientPromise = client.connect()
}
clientPromise = globalWithMongo._mongoClientPromise
} else {
// In production mode, it's best to not use a global variable.
client = new MongoClient(uri, options)
clientPromise = client.connect()
}
// Export a module-scoped MongoClient promise. By doing this in a
// separate module, the client can be shared across functions.
export default clientPromise
</code>
//db.js
import { MongoClient, ServerApiVersion } from "mongodb"
if (!process.env.MONGODB_URI) {
throw new Error('Invalid/Missing environment variable: "MONGODB_URI"')
}
const uri = process.env.MONGODB_URI
const options = {
serverApi: {
version: ServerApiVersion.v1,
strict: true,
deprecationErrors: true,
},
}
let client
let clientPromise
if (process.env.NODE_ENV === "development") {
// In development mode, use a global variable so that the value
// is preserved across module reloads caused by HMR (Hot Module Replacement).
let globalWithMongo = global
if (!globalWithMongo._mongoClientPromise) {
client = new MongoClient(uri, options)
globalWithMongo._mongoClientPromise = client.connect()
}
clientPromise = globalWithMongo._mongoClientPromise
} else {
// In production mode, it's best to not use a global variable.
client = new MongoClient(uri, options)
clientPromise = client.connect()
}
// Export a module-scoped MongoClient promise. By doing this in a
// separate module, the client can be shared across functions.
export default clientPromise
help me please
I want to have a solution for this. I tried exactly same as the official doc said but don’t know how to implement the login logic for credentials.