main
Some checks failed
UI Deploy (Next-Auth Support) 🎨 / build-and-deploy (push) Has been cancelled

This commit is contained in:
Harun CAN
2026-03-14 14:01:11 +03:00
parent eca4b8c652
commit eba6ea9b8d
11 changed files with 1243 additions and 287 deletions

98
src/lib/auth-options.ts Normal file
View File

@@ -0,0 +1,98 @@
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,
};