next-auth-mfelfelani72 0.0.21 → 0.0.22
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.
|
@@ -4,17 +4,8 @@ export declare function loginHandler(apiUrl: string): (req: NextRequest) => Prom
|
|
|
4
4
|
success: boolean;
|
|
5
5
|
debug: {
|
|
6
6
|
url: string;
|
|
7
|
-
status: number;
|
|
8
|
-
contentType: string | null;
|
|
9
7
|
responsePreview: string;
|
|
10
8
|
};
|
|
11
|
-
}> | NextResponse<{
|
|
12
|
-
message: string;
|
|
13
|
-
success: boolean;
|
|
14
|
-
debug: {
|
|
15
|
-
url: string;
|
|
16
|
-
responseText: string;
|
|
17
|
-
};
|
|
18
9
|
}> | NextResponse<{
|
|
19
10
|
message: string;
|
|
20
11
|
success: boolean;
|
|
@@ -1,21 +1,60 @@
|
|
|
1
1
|
// src/libraries/auth/loginHandler.ts
|
|
2
2
|
import { NextResponse } from "next/server";
|
|
3
|
+
import fs from 'fs';
|
|
4
|
+
import path from 'path';
|
|
3
5
|
export function loginHandler(apiUrl) {
|
|
4
6
|
return async function POST(req) {
|
|
5
|
-
var _a, _b, _c, _d, _e, _f, _g;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
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('═══════════════════════════════════════════════════════');
|
|
9
41
|
try {
|
|
10
|
-
//
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
+
// ============================================
|
|
15
52
|
const body = await req.json();
|
|
16
|
-
|
|
53
|
+
log('📦 REQUEST BODY:', Object.assign(Object.assign({}, body), { password: body.password ? '***' : undefined }));
|
|
54
|
+
// ============================================
|
|
17
55
|
// 3. ارسال درخواست به API
|
|
18
|
-
|
|
56
|
+
// ============================================
|
|
57
|
+
log(`🚀 SENDING REQUEST TO: ${apiUrl}`);
|
|
19
58
|
const startTime = Date.now();
|
|
20
59
|
const response = await fetch(apiUrl, {
|
|
21
60
|
method: "POST",
|
|
@@ -26,75 +65,85 @@ export function loginHandler(apiUrl) {
|
|
|
26
65
|
body: JSON.stringify(body),
|
|
27
66
|
});
|
|
28
67
|
const endTime = Date.now();
|
|
29
|
-
|
|
68
|
+
log(`⏱️ Request took: ${endTime - startTime}ms`);
|
|
69
|
+
// ============================================
|
|
30
70
|
// 4. لاگ کردن پاسخ
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
//
|
|
71
|
+
// ============================================
|
|
72
|
+
log('📥 RESPONSE:');
|
|
73
|
+
log(` - Status: ${response.status} ${response.statusText}`);
|
|
74
|
+
log(` - Headers:`, Object.fromEntries(response.headers));
|
|
75
|
+
// ============================================
|
|
76
|
+
// 5. خواندن پاسخ
|
|
77
|
+
// ============================================
|
|
37
78
|
const responseText = await response.text();
|
|
38
|
-
|
|
39
|
-
//
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
statusText: response.statusText,
|
|
54
|
-
contentType: contentType,
|
|
55
|
-
responsePreview: responseText.substring(0, 200),
|
|
56
|
-
}
|
|
57
|
-
}, { status: 500 });
|
|
58
|
-
}
|
|
59
|
-
// اگر JSON نیست ولی HTML هم نیست
|
|
79
|
+
log(`📝 RESPONSE TEXT (first 1000 chars):`, responseText.substring(0, 1000));
|
|
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));
|
|
60
94
|
return NextResponse.json({
|
|
61
|
-
message: `API returned
|
|
95
|
+
message: `API returned HTML instead of JSON. Please check the URL: ${apiUrl}`,
|
|
62
96
|
success: false,
|
|
63
97
|
debug: {
|
|
64
98
|
url: apiUrl,
|
|
65
99
|
status: response.status,
|
|
100
|
+
statusText: response.statusText,
|
|
66
101
|
contentType: contentType,
|
|
67
|
-
responsePreview: responseText.substring(0,
|
|
102
|
+
responsePreview: responseText.substring(0, 300),
|
|
68
103
|
}
|
|
69
104
|
}, { status: 500 });
|
|
70
105
|
}
|
|
71
|
-
//
|
|
106
|
+
// ============================================
|
|
107
|
+
// 7. Parse کردن JSON
|
|
108
|
+
// ============================================
|
|
72
109
|
let data;
|
|
73
110
|
try {
|
|
74
111
|
data = JSON.parse(responseText);
|
|
75
|
-
|
|
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 }));
|
|
76
114
|
}
|
|
77
115
|
catch (parseError) {
|
|
78
|
-
|
|
79
|
-
|
|
116
|
+
log('❌ JSON PARSE ERROR:', {
|
|
117
|
+
error: parseError.message,
|
|
118
|
+
responseText: responseText.substring(0, 500),
|
|
119
|
+
});
|
|
80
120
|
return NextResponse.json({
|
|
81
|
-
message:
|
|
121
|
+
message: `Failed to parse JSON response: ${parseError.message}`,
|
|
82
122
|
success: false,
|
|
83
123
|
debug: {
|
|
84
124
|
url: apiUrl,
|
|
85
|
-
|
|
125
|
+
responsePreview: responseText.substring(0, 300),
|
|
86
126
|
}
|
|
87
127
|
}, { status: 500 });
|
|
88
128
|
}
|
|
89
|
-
//
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
129
|
+
// ============================================
|
|
130
|
+
// 8. بررسی ساختار داده
|
|
131
|
+
// ============================================
|
|
132
|
+
log('🔍 DATA STRUCTURE CHECK:');
|
|
133
|
+
log(` - success: ${data.success !== undefined ? data.success : 'undefined'}`);
|
|
134
|
+
log(` - data: ${data.data !== undefined ? 'present' : 'undefined'}`);
|
|
135
|
+
log(` - data.token: ${((_a = data.data) === null || _a === void 0 ? void 0 : _a.token) !== undefined ? 'present' : 'undefined'}`);
|
|
136
|
+
log(` - data.token.access_token: ${((_c = (_b = data.data) === null || _b === void 0 ? void 0 : _b.token) === null || _c === void 0 ? void 0 : _c.access_token) !== undefined ? 'present' : 'undefined'}`);
|
|
137
|
+
log(` - data.user: ${((_d = data.data) === null || _d === void 0 ? void 0 : _d.user) !== undefined ? 'present' : 'undefined'}`);
|
|
138
|
+
// ============================================
|
|
139
|
+
// 9. پردازش موفقیتآمیز
|
|
140
|
+
// ============================================
|
|
141
|
+
if (data.success && ((_f = (_e = data.data) === null || _e === void 0 ? void 0 : _e.token) === null || _f === void 0 ? void 0 : _f.access_token)) {
|
|
142
|
+
log('✅✅✅ LOGIN SUCCESSFUL ✅✅✅');
|
|
143
|
+
log(`👤 User:`, {
|
|
144
|
+
email: ((_g = data.data.user) === null || _g === void 0 ? void 0 : _g.email) || 'unknown',
|
|
145
|
+
id: ((_h = data.data.user) === null || _h === void 0 ? void 0 : _h.id) || 'unknown',
|
|
146
|
+
});
|
|
98
147
|
const res = NextResponse.json({
|
|
99
148
|
message: "Login successful",
|
|
100
149
|
success: true,
|
|
@@ -106,19 +155,30 @@ export function loginHandler(apiUrl) {
|
|
|
106
155
|
path: "/",
|
|
107
156
|
maxAge: 60 * 60 * 24 * 7,
|
|
108
157
|
};
|
|
109
|
-
|
|
110
|
-
|
|
158
|
+
log('🍪 SETTING COOKIES:');
|
|
159
|
+
// accessToken
|
|
111
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
|
|
112
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
|
|
113
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
|
|
114
169
|
res.cookies.set(Object.assign(Object.assign({ name: "isLoggedIn", value: "true" }, cookieOptions), { httpOnly: false }));
|
|
115
|
-
|
|
116
|
-
|
|
170
|
+
log(' - isLoggedIn: set');
|
|
171
|
+
log('═══════════════════════════════════════════════════════');
|
|
172
|
+
log('✅ LOGIN COMPLETED SUCCESSFULLY');
|
|
173
|
+
log('═══════════════════════════════════════════════════════');
|
|
117
174
|
return res;
|
|
118
175
|
}
|
|
119
|
-
//
|
|
120
|
-
|
|
121
|
-
|
|
176
|
+
// ============================================
|
|
177
|
+
// 10. لاگین ناموفق
|
|
178
|
+
// ============================================
|
|
179
|
+
log('❌ LOGIN FAILED');
|
|
180
|
+
log(` - Message: ${data.message || 'Unknown error'}`);
|
|
181
|
+
log(` - Data:`, data);
|
|
122
182
|
return NextResponse.json({
|
|
123
183
|
message: data.message || "Login failed",
|
|
124
184
|
success: false,
|
|
@@ -129,10 +189,14 @@ export function loginHandler(apiUrl) {
|
|
|
129
189
|
}, { status: response.status || 401 });
|
|
130
190
|
}
|
|
131
191
|
catch (err) {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
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('═══════════════════════════════════════════════════════');
|
|
136
200
|
return NextResponse.json({
|
|
137
201
|
message: err.message || "Internal server error",
|
|
138
202
|
success: false,
|