<code>import { NextAuthOptions } from 'next-auth';
import CredentialsProvider from 'next-auth/providers/credentials';
import bcrypt from 'bcryptjs';
import dbConnect from '@/lib/dbConnect';
import UserModel from '@/model/User';
export const authOptions: NextAuthOptions = {
providers: [
CredentialsProvider({
id: 'credentials',
name: 'Credentials',
type: 'credentials',
credentials: {
email: { label: 'Email', type: 'text' },
password: { label: 'Password', type: 'password' },
},
async authorize(credentials: any, req): Promise<any> {
await dbConnect();
try {
const user = await UserModel.findOne({
$or: [
{ email: credentials.identifier },
{ username: credentials.identifier },
],
});
if (!user) {
throw new Error('No user found with this email');
}
if (!user.isVerified) {
throw new Error(
'Please verify your account before logging in'
);
}
const isPasswordCorrect = await bcrypt.compare(
credentials.password,
user.password
);
if (isPasswordCorrect) {
return user;
} else {
throw new Error('Incorrect password');
}
} catch (err: any) {
throw new Error(err);
}
},
}),
],
callbacks: {
async jwt({ token, user }) {
if (user) {
token._id = user._id?.toString();
token.username = user.usernamQe;
token.isVerified = user.isVerified;
token.isAcceptingMessages = user.isAcceptingMessages;
}
return token;
},
async session({ session, token }) {
if (token) {
console.log(`token inside session: ${JSON.stringify(token)}`);
session.user._id = token._id;
session.user.isVerified = token.isVerified;
session.user.isAcceptingMessages = token.isAcceptingMessages;
session.user.username = token.username;
}
console.log(`session: ${JSON.stringify(session)}`);
return session;
},
},
session: {
strategy: 'jwt',
},
secret: 'sec3et',
pages: {
signIn: '/signin',
},
};
</code>
<code>import { NextAuthOptions } from 'next-auth';
import CredentialsProvider from 'next-auth/providers/credentials';
import bcrypt from 'bcryptjs';
import dbConnect from '@/lib/dbConnect';
import UserModel from '@/model/User';
export const authOptions: NextAuthOptions = {
providers: [
CredentialsProvider({
id: 'credentials',
name: 'Credentials',
type: 'credentials',
credentials: {
email: { label: 'Email', type: 'text' },
password: { label: 'Password', type: 'password' },
},
async authorize(credentials: any, req): Promise<any> {
await dbConnect();
try {
const user = await UserModel.findOne({
$or: [
{ email: credentials.identifier },
{ username: credentials.identifier },
],
});
if (!user) {
throw new Error('No user found with this email');
}
if (!user.isVerified) {
throw new Error(
'Please verify your account before logging in'
);
}
const isPasswordCorrect = await bcrypt.compare(
credentials.password,
user.password
);
if (isPasswordCorrect) {
return user;
} else {
throw new Error('Incorrect password');
}
} catch (err: any) {
throw new Error(err);
}
},
}),
],
callbacks: {
async jwt({ token, user }) {
if (user) {
token._id = user._id?.toString();
token.username = user.usernamQe;
token.isVerified = user.isVerified;
token.isAcceptingMessages = user.isAcceptingMessages;
}
return token;
},
async session({ session, token }) {
if (token) {
console.log(`token inside session: ${JSON.stringify(token)}`);
session.user._id = token._id;
session.user.isVerified = token.isVerified;
session.user.isAcceptingMessages = token.isAcceptingMessages;
session.user.username = token.username;
}
console.log(`session: ${JSON.stringify(session)}`);
return session;
},
},
session: {
strategy: 'jwt',
},
secret: 'sec3et',
pages: {
signIn: '/signin',
},
};
</code>
import { NextAuthOptions } from 'next-auth';
import CredentialsProvider from 'next-auth/providers/credentials';
import bcrypt from 'bcryptjs';
import dbConnect from '@/lib/dbConnect';
import UserModel from '@/model/User';
export const authOptions: NextAuthOptions = {
providers: [
CredentialsProvider({
id: 'credentials',
name: 'Credentials',
type: 'credentials',
credentials: {
email: { label: 'Email', type: 'text' },
password: { label: 'Password', type: 'password' },
},
async authorize(credentials: any, req): Promise<any> {
await dbConnect();
try {
const user = await UserModel.findOne({
$or: [
{ email: credentials.identifier },
{ username: credentials.identifier },
],
});
if (!user) {
throw new Error('No user found with this email');
}
if (!user.isVerified) {
throw new Error(
'Please verify your account before logging in'
);
}
const isPasswordCorrect = await bcrypt.compare(
credentials.password,
user.password
);
if (isPasswordCorrect) {
return user;
} else {
throw new Error('Incorrect password');
}
} catch (err: any) {
throw new Error(err);
}
},
}),
],
callbacks: {
async jwt({ token, user }) {
if (user) {
token._id = user._id?.toString();
token.username = user.usernamQe;
token.isVerified = user.isVerified;
token.isAcceptingMessages = user.isAcceptingMessages;
}
return token;
},
async session({ session, token }) {
if (token) {
console.log(`token inside session: ${JSON.stringify(token)}`);
session.user._id = token._id;
session.user.isVerified = token.isVerified;
session.user.isAcceptingMessages = token.isAcceptingMessages;
session.user.username = token.username;
}
console.log(`session: ${JSON.stringify(session)}`);
return session;
},
},
session: {
strategy: 'jwt',
},
secret: 'sec3et',
pages: {
signIn: '/signin',
},
};
it is options.ts where nextauth is doing its work but it is not giving jwt token to client side only session token is coming
Below code is middleware.ts
<code>import { NextRequest, NextResponse } from 'next/server';
import { getToken } from 'next-auth/jwt';
export async function middleware(request: NextRequest) {
const token = await getToken({ req: request });
console.log('Token in middleware:', token);
const url = request.nextUrl;
if (
token &&
(url.pathname.startsWith('/signin') ||
url.pathname.startsWith('/signup') ||
url.pathname.startsWith('/verify') ||
url.pathname.startsWith('/'))
) {
return NextResponse.redirect(new URL('/dashboard', request.url));
}
if (!token && url.pathname.startsWith('/dashboard')) {
return NextResponse.redirect(new URL('/signin', request.url));
}
}
export const config = {
matcher: ['/', '/signin', '/signup', '/dashboard/:path*', '/verify/:path*'],
};
</code>
<code>import { NextRequest, NextResponse } from 'next/server';
import { getToken } from 'next-auth/jwt';
export async function middleware(request: NextRequest) {
const token = await getToken({ req: request });
console.log('Token in middleware:', token);
const url = request.nextUrl;
if (
token &&
(url.pathname.startsWith('/signin') ||
url.pathname.startsWith('/signup') ||
url.pathname.startsWith('/verify') ||
url.pathname.startsWith('/'))
) {
return NextResponse.redirect(new URL('/dashboard', request.url));
}
if (!token && url.pathname.startsWith('/dashboard')) {
return NextResponse.redirect(new URL('/signin', request.url));
}
}
export const config = {
matcher: ['/', '/signin', '/signup', '/dashboard/:path*', '/verify/:path*'],
};
</code>
import { NextRequest, NextResponse } from 'next/server';
import { getToken } from 'next-auth/jwt';
export async function middleware(request: NextRequest) {
const token = await getToken({ req: request });
console.log('Token in middleware:', token);
const url = request.nextUrl;
if (
token &&
(url.pathname.startsWith('/signin') ||
url.pathname.startsWith('/signup') ||
url.pathname.startsWith('/verify') ||
url.pathname.startsWith('/'))
) {
return NextResponse.redirect(new URL('/dashboard', request.url));
}
if (!token && url.pathname.startsWith('/dashboard')) {
return NextResponse.redirect(new URL('/signin', request.url));
}
}
export const config = {
matcher: ['/', '/signin', '/signup', '/dashboard/:path*', '/verify/:path*'],
};
token is not coming only next-auth-session is present
I want that when user signin i want to redirect to /dashboard frontend is working proper but only token is not coming
New contributor
Jay Suthar is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.