next-auth-mfelfelani72 0.0.22 → 0.0.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,28 +1,10 @@
|
|
|
1
1
|
import { NextRequest, NextResponse } from "next/server";
|
|
2
2
|
export declare function loginHandler(apiUrl: string): (req: NextRequest) => Promise<NextResponse<{
|
|
3
|
-
message: string;
|
|
4
3
|
success: boolean;
|
|
5
|
-
debug: {
|
|
6
|
-
url: string;
|
|
7
|
-
responsePreview: string;
|
|
8
|
-
};
|
|
9
|
-
}> | NextResponse<{
|
|
10
|
-
message: string;
|
|
11
|
-
success: boolean;
|
|
12
|
-
user: any;
|
|
13
|
-
}> | NextResponse<{
|
|
14
4
|
message: any;
|
|
15
|
-
|
|
16
|
-
debug: {
|
|
17
|
-
status: number;
|
|
18
|
-
responseData: any;
|
|
19
|
-
};
|
|
5
|
+
error: any;
|
|
20
6
|
}> | NextResponse<{
|
|
21
|
-
message: any;
|
|
22
7
|
success: boolean;
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
errorMessage: any;
|
|
26
|
-
stack: any;
|
|
27
|
-
};
|
|
8
|
+
message: string;
|
|
9
|
+
user: any;
|
|
28
10
|
}>>;
|
|
@@ -1,61 +1,10 @@
|
|
|
1
1
|
// src/libraries/auth/loginHandler.ts
|
|
2
2
|
import { NextResponse } from "next/server";
|
|
3
|
-
import fs from 'fs';
|
|
4
|
-
import path from 'path';
|
|
5
3
|
export function loginHandler(apiUrl) {
|
|
6
4
|
return async function POST(req) {
|
|
7
|
-
var _a, _b
|
|
8
|
-
// ============================================
|
|
9
|
-
// تنظیمات لاگ
|
|
10
|
-
// ============================================
|
|
11
|
-
const LOG_DIR = path.join(process.cwd(), 'logs');
|
|
12
|
-
const LOG_FILE = path.join(LOG_DIR, 'auth-debug.log');
|
|
13
|
-
// ایجاد پوشه logs اگر وجود ندارد
|
|
14
|
-
if (!fs.existsSync(LOG_DIR)) {
|
|
15
|
-
fs.mkdirSync(LOG_DIR, { recursive: true });
|
|
16
|
-
}
|
|
17
|
-
// تابع لاگنویسی
|
|
18
|
-
const log = (message, data) => {
|
|
19
|
-
const timestamp = new Date().toISOString();
|
|
20
|
-
const logLine = data
|
|
21
|
-
? `[${timestamp}] ${message}\n${JSON.stringify(data, null, 2)}\n`
|
|
22
|
-
: `[${timestamp}] ${message}\n`;
|
|
23
|
-
// لاگ در ترمینال
|
|
24
|
-
console.log(`🔐 ${message}`);
|
|
25
|
-
// لاگ در فایل
|
|
26
|
-
try {
|
|
27
|
-
fs.appendFileSync(LOG_FILE, logLine);
|
|
28
|
-
}
|
|
29
|
-
catch (err) {
|
|
30
|
-
console.error('Failed to write log file:', err);
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
|
-
// ============================================
|
|
34
|
-
// شروع لاگین
|
|
35
|
-
// ============================================
|
|
36
|
-
log('═══════════════════════════════════════════════════════');
|
|
37
|
-
log('🔐 LOGIN HANDLER STARTED');
|
|
38
|
-
log(`🕐 Time: ${new Date().toLocaleString('fa-IR')}`);
|
|
39
|
-
log(`📂 Log file: ${LOG_FILE}`);
|
|
40
|
-
log('═══════════════════════════════════════════════════════');
|
|
5
|
+
var _a, _b;
|
|
41
6
|
try {
|
|
42
|
-
// ============================================
|
|
43
|
-
// 1. لاگ کردن اطلاعات درخواست
|
|
44
|
-
// ============================================
|
|
45
|
-
log('📋 REQUEST INFO:');
|
|
46
|
-
log(` - Method: ${req.method}`);
|
|
47
|
-
log(` - URL: ${req.url}`);
|
|
48
|
-
log(` - Headers:`, Object.fromEntries(req.headers));
|
|
49
|
-
// ============================================
|
|
50
|
-
// 2. لاگ کردن Body
|
|
51
|
-
// ============================================
|
|
52
7
|
const body = await req.json();
|
|
53
|
-
log('📦 REQUEST BODY:', Object.assign(Object.assign({}, body), { password: body.password ? '***' : undefined }));
|
|
54
|
-
// ============================================
|
|
55
|
-
// 3. ارسال درخواست به API
|
|
56
|
-
// ============================================
|
|
57
|
-
log(`🚀 SENDING REQUEST TO: ${apiUrl}`);
|
|
58
|
-
const startTime = Date.now();
|
|
59
8
|
const response = await fetch(apiUrl, {
|
|
60
9
|
method: "POST",
|
|
61
10
|
headers: {
|
|
@@ -64,145 +13,52 @@ export function loginHandler(apiUrl) {
|
|
|
64
13
|
},
|
|
65
14
|
body: JSON.stringify(body),
|
|
66
15
|
});
|
|
67
|
-
const endTime = Date.now();
|
|
68
|
-
log(`⏱️ Request took: ${endTime - startTime}ms`);
|
|
69
|
-
// ============================================
|
|
70
|
-
// 4. لاگ کردن پاسخ
|
|
71
|
-
// ============================================
|
|
72
|
-
log('📥 RESPONSE:');
|
|
73
|
-
log(` - Status: ${response.status} ${response.statusText}`);
|
|
74
|
-
log(` - Headers:`, Object.fromEntries(response.headers));
|
|
75
|
-
// ============================================
|
|
76
|
-
// 5. خواندن پاسخ
|
|
77
|
-
// ============================================
|
|
78
16
|
const responseText = await response.text();
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
// 6. بررسی اینکه پاسخ HTML است یا JSON
|
|
82
|
-
// ============================================
|
|
83
|
-
const contentType = response.headers.get("content-type");
|
|
84
|
-
log(`📄 Content-Type: ${contentType}`);
|
|
85
|
-
// اگر پاسخ HTML بود
|
|
86
|
-
if (responseText.trim().startsWith('<!DOCTYPE') ||
|
|
87
|
-
responseText.trim().startsWith('<html') ||
|
|
88
|
-
responseText.trim().startsWith('<!DOCTYPE html')) {
|
|
89
|
-
log('❌❌❌ HTML RESPONSE DETECTED ❌❌❌');
|
|
90
|
-
log(' - This usually means the API URL is wrong');
|
|
91
|
-
log(` - URL: ${apiUrl}`);
|
|
92
|
-
log(` - Status: ${response.status}`);
|
|
93
|
-
log(` - Response preview:`, responseText.substring(0, 500));
|
|
17
|
+
// ==== اینجا خطا رو برمیگردونیم ====
|
|
18
|
+
if (responseText.startsWith('<!DOCTYPE') || responseText.startsWith('<html')) {
|
|
94
19
|
return NextResponse.json({
|
|
95
|
-
message: `API returned HTML instead of JSON. Please check the URL: ${apiUrl}`,
|
|
96
20
|
success: false,
|
|
97
|
-
|
|
21
|
+
message: 'API returned HTML instead of JSON',
|
|
22
|
+
error: {
|
|
98
23
|
url: apiUrl,
|
|
99
24
|
status: response.status,
|
|
100
|
-
|
|
101
|
-
contentType: contentType,
|
|
102
|
-
responsePreview: responseText.substring(0, 300),
|
|
25
|
+
htmlPreview: responseText.substring(0, 200),
|
|
103
26
|
}
|
|
104
27
|
}, { status: 500 });
|
|
105
28
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
// ============================================
|
|
109
|
-
let data;
|
|
110
|
-
try {
|
|
111
|
-
data = JSON.parse(responseText);
|
|
112
|
-
log('✅ JSON PARSED SUCCESSFULLY');
|
|
113
|
-
log('📊 PARSED DATA:', Object.assign(Object.assign({}, data), { data: data.data ? Object.assign(Object.assign({}, data.data), { token: data.data.token ? Object.assign(Object.assign({}, data.data.token), { access_token: data.data.token.access_token ? '***' : undefined }) : undefined }) : undefined }));
|
|
114
|
-
}
|
|
115
|
-
catch (parseError) {
|
|
116
|
-
log('❌ JSON PARSE ERROR:', {
|
|
117
|
-
error: parseError.message,
|
|
118
|
-
responseText: responseText.substring(0, 500),
|
|
119
|
-
});
|
|
29
|
+
const data = JSON.parse(responseText);
|
|
30
|
+
if (!data.success || !((_b = (_a = data.data) === null || _a === void 0 ? void 0 : _a.token) === null || _b === void 0 ? void 0 : _b.access_token)) {
|
|
120
31
|
return NextResponse.json({
|
|
121
|
-
message: `Failed to parse JSON response: ${parseError.message}`,
|
|
122
32
|
success: false,
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
}
|
|
127
|
-
}, { status: 500 });
|
|
33
|
+
message: data.message || 'Login failed',
|
|
34
|
+
error: data,
|
|
35
|
+
}, { status: 401 });
|
|
128
36
|
}
|
|
129
|
-
//
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
id: ((_h = data.data.user) === null || _h === void 0 ? void 0 : _h.id) || 'unknown',
|
|
146
|
-
});
|
|
147
|
-
const res = NextResponse.json({
|
|
148
|
-
message: "Login successful",
|
|
149
|
-
success: true,
|
|
150
|
-
user: data.data.user,
|
|
151
|
-
});
|
|
152
|
-
const cookieOptions = {
|
|
153
|
-
secure: process.env.NODE_ENV === "production",
|
|
154
|
-
sameSite: "strict",
|
|
155
|
-
path: "/",
|
|
156
|
-
maxAge: 60 * 60 * 24 * 7,
|
|
157
|
-
};
|
|
158
|
-
log('🍪 SETTING COOKIES:');
|
|
159
|
-
// accessToken
|
|
160
|
-
res.cookies.set(Object.assign(Object.assign({ name: "accessToken", value: data.data.token.access_token }, cookieOptions), { httpOnly: true }));
|
|
161
|
-
log(' - accessToken: set');
|
|
162
|
-
// tokenType
|
|
163
|
-
res.cookies.set(Object.assign(Object.assign({ name: "tokenType", value: data.data.token.token_type || "Bearer" }, cookieOptions), { httpOnly: true }));
|
|
164
|
-
log(' - tokenType: set');
|
|
165
|
-
// user
|
|
166
|
-
res.cookies.set(Object.assign(Object.assign({ name: "user", value: JSON.stringify(data.data.user) }, cookieOptions), { httpOnly: false }));
|
|
167
|
-
log(' - user: set');
|
|
168
|
-
// isLoggedIn
|
|
169
|
-
res.cookies.set(Object.assign(Object.assign({ name: "isLoggedIn", value: "true" }, cookieOptions), { httpOnly: false }));
|
|
170
|
-
log(' - isLoggedIn: set');
|
|
171
|
-
log('═══════════════════════════════════════════════════════');
|
|
172
|
-
log('✅ LOGIN COMPLETED SUCCESSFULLY');
|
|
173
|
-
log('═══════════════════════════════════════════════════════');
|
|
174
|
-
return res;
|
|
175
|
-
}
|
|
176
|
-
// ============================================
|
|
177
|
-
// 10. لاگین ناموفق
|
|
178
|
-
// ============================================
|
|
179
|
-
log('❌ LOGIN FAILED');
|
|
180
|
-
log(` - Message: ${data.message || 'Unknown error'}`);
|
|
181
|
-
log(` - Data:`, data);
|
|
182
|
-
return NextResponse.json({
|
|
183
|
-
message: data.message || "Login failed",
|
|
184
|
-
success: false,
|
|
185
|
-
debug: {
|
|
186
|
-
status: response.status,
|
|
187
|
-
responseData: data,
|
|
188
|
-
}
|
|
189
|
-
}, { status: response.status || 401 });
|
|
37
|
+
// موفقیت
|
|
38
|
+
const res = NextResponse.json({
|
|
39
|
+
success: true,
|
|
40
|
+
message: "Login successful",
|
|
41
|
+
user: data.data.user,
|
|
42
|
+
});
|
|
43
|
+
res.cookies.set({
|
|
44
|
+
name: "accessToken",
|
|
45
|
+
value: data.data.token.access_token,
|
|
46
|
+
httpOnly: true,
|
|
47
|
+
secure: process.env.NODE_ENV === "production",
|
|
48
|
+
sameSite: "strict",
|
|
49
|
+
path: "/",
|
|
50
|
+
maxAge: 60 * 60 * 24 * 7,
|
|
51
|
+
});
|
|
52
|
+
return res;
|
|
190
53
|
}
|
|
191
54
|
catch (err) {
|
|
192
|
-
//
|
|
193
|
-
// 11. خطای کلی
|
|
194
|
-
// ============================================
|
|
195
|
-
log('❌❌❌ CATCH BLOCK ERROR ❌❌❌');
|
|
196
|
-
log(` - Error name: ${err.name}`);
|
|
197
|
-
log(` - Error message: ${err.message}`);
|
|
198
|
-
log(` - Error stack:`, err.stack);
|
|
199
|
-
log('═══════════════════════════════════════════════════════');
|
|
55
|
+
// ==== هر خطای دیگه ====
|
|
200
56
|
return NextResponse.json({
|
|
201
|
-
message: err.message || "Internal server error",
|
|
202
57
|
success: false,
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
58
|
+
message: err.message || 'Internal server error',
|
|
59
|
+
error: {
|
|
60
|
+
name: err.name,
|
|
61
|
+
message: err.message,
|
|
206
62
|
stack: err.stack,
|
|
207
63
|
}
|
|
208
64
|
}, { status: 500 });
|