generated from fahricansecer/boilerplate-fe
Some checks failed
UI Deploy (Next-Auth Support) 🎨 / build-and-deploy (push) Has been cancelled
99 lines
3.7 KiB
TypeScript
99 lines
3.7 KiB
TypeScript
import baseUrl from "@/config/base-url";
|
||
import { authService } from "@/lib/api/example/auth/service";
|
||
import Credentials from "next-auth/providers/credentials";
|
||
import { AuthOptions } from "next-auth";
|
||
|
||
function randomToken() {
|
||
return Math.random().toString(36).substring(2) + Date.now().toString(36);
|
||
}
|
||
|
||
const isMockMode = process.env.NEXT_PUBLIC_ENABLE_MOCK_MODE === "true";
|
||
|
||
export const authOptions: AuthOptions = {
|
||
providers: [
|
||
Credentials({
|
||
name: "Credentials",
|
||
credentials: {
|
||
email: { label: "Email", type: "text" },
|
||
password: { label: "Password", type: "password" },
|
||
},
|
||
async authorize(credentials) {
|
||
console.log("credentials", credentials);
|
||
if (!credentials?.email || !credentials?.password) {
|
||
throw new Error("Email ve şifre gereklidir.");
|
||
}
|
||
|
||
// Eğer mock mod aktifse backend'e gitme
|
||
if (isMockMode) {
|
||
return {
|
||
id: credentials.email,
|
||
name: credentials.email.split("@")[0],
|
||
email: credentials.email,
|
||
accessToken: randomToken(),
|
||
refreshToken: randomToken(),
|
||
};
|
||
}
|
||
|
||
// Normal mod: backend'e istek at
|
||
const res = await authService.login({
|
||
email: credentials.email,
|
||
password: credentials.password,
|
||
});
|
||
|
||
console.log("res", res);
|
||
|
||
const response = res;
|
||
|
||
// Backend returns ApiResponse<TokenResponseDto>
|
||
// Structure: { data: { accessToken, refreshToken, expiresIn, user }, message, statusCode }
|
||
if (!res.success || !response?.data?.accessToken) {
|
||
throw new Error(response?.message || "Giriş başarısız");
|
||
}
|
||
|
||
const { accessToken, refreshToken, user } = response.data;
|
||
|
||
return {
|
||
id: user.id,
|
||
name: user.firstName
|
||
? `${user.firstName} ${user.lastName || ""}`.trim()
|
||
: user.email.split("@")[0],
|
||
email: user.email,
|
||
accessToken,
|
||
refreshToken,
|
||
roles: user.roles || [],
|
||
};
|
||
},
|
||
}),
|
||
],
|
||
callbacks: {
|
||
async jwt({ token, user, account, profile }: any) {
|
||
console.log('[DEBUG-AUTH] JWT Callback Triggered', { hasUser: !!user, tokenKeys: Object.keys(token) });
|
||
if (user) {
|
||
console.log('[DEBUG-AUTH] JWT User details:', { id: user.id, email: user.email, hasAccessToken: !!user.accessToken });
|
||
token.accessToken = user.accessToken;
|
||
token.refreshToken = user.refreshToken;
|
||
token.id = user.id;
|
||
token.roles = user.roles;
|
||
}
|
||
return token;
|
||
},
|
||
async session({ session, token }: any) {
|
||
console.log('[DEBUG-AUTH] Session Callback Triggered', { hasToken: !!token, sessionKeys: Object.keys(session) });
|
||
if (token) {
|
||
console.log('[DEBUG-AUTH] Session Token details:', { id: token.id, hasAccessToken: !!token.accessToken });
|
||
session.user.id = token.id;
|
||
session.user.roles = token.roles;
|
||
session.accessToken = token.accessToken;
|
||
session.refreshToken = token.refreshToken;
|
||
}
|
||
return session;
|
||
},
|
||
},
|
||
pages: {
|
||
signIn: "/signin",
|
||
error: "/signin",
|
||
},
|
||
session: { strategy: "jwt" },
|
||
secret: process.env.NEXTAUTH_SECRET,
|
||
};
|