mirror of
https://github.com/R0m1k3/LogiFlow.git
synced 2026-10-16 19:56:32 +02:00
Improve user creation process with better error logging and testing
Add detailed logging and a test script to diagnose and fix user creation failures in production. Replit-Commit-Author: Agent Replit-Commit-Session-Id: a8a78c07-e900-425c-a577-5b4c5894379d Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/a8a78c07-e900-425c-a577-5b4c5894379d/AwxJU6M
This commit is contained in:
1 parent
7235be8b84
commit
b886f317ca
5 files changed
+198
-16
No files matched your search
+44
-7
@@ -907,9 +907,13 @@ export async function registerRoutes(app: Express): Promise<Server> {
|
||||
|
||||
app.post('/api/users', isAuthenticated, async (req: any, res) => {
|
||||
try {
|
||||
console.log('🔍 POST /api/users - Creating new user');
|
||||
console.log('📥 Request body:', JSON.stringify(req.body, null, 2));
|
||||
|
||||
const userId = req.user.claims ? req.user.claims.sub : req.user.id;
|
||||
const currentUser = await storage.getUserWithGroups(userId);
|
||||
if (!currentUser || currentUser.role !== 'admin') {
|
||||
console.log('❌ Access denied - user not admin');
|
||||
return res.status(403).json({ message: "Access denied" });
|
||||
}
|
||||
|
||||
@@ -924,23 +928,51 @@ export async function registerRoutes(app: Express): Promise<Server> {
|
||||
role: z.enum(['admin', 'directeur', 'manager', 'employee']).optional(),
|
||||
});
|
||||
|
||||
console.log('🔍 Parsing user data...');
|
||||
const userData = createUserSchema.parse(req.body);
|
||||
console.log('✅ User data parsed successfully');
|
||||
|
||||
// Hash password if provided (for local auth)
|
||||
// Hash password with improved error handling
|
||||
let hashedPassword = userData.password;
|
||||
if (userData.password) {
|
||||
userData.password = await hashPasswordSimple(userData.password);
|
||||
try {
|
||||
console.log('🔒 Hashing password...');
|
||||
hashedPassword = await hashPasswordSimple(userData.password);
|
||||
console.log('✅ Password hashed successfully');
|
||||
} catch (hashError) {
|
||||
console.error('❌ Password hashing failed:', hashError);
|
||||
return res.status(500).json({ message: "Failed to secure password" });
|
||||
}
|
||||
}
|
||||
|
||||
const newUser = await storage.createUser({
|
||||
id: userData.id || `manual_${Date.now()}`, // Generate manual ID for created users
|
||||
...userData,
|
||||
});
|
||||
// Generate unique ID
|
||||
const newUserId = userData.id || `manual_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
||||
console.log('🔍 Generated user ID:', newUserId);
|
||||
|
||||
const userToCreate = {
|
||||
id: newUserId,
|
||||
username: userData.username,
|
||||
email: userData.email || '',
|
||||
firstName: userData.firstName || '',
|
||||
lastName: userData.lastName || '',
|
||||
password: hashedPassword,
|
||||
role: userData.role || 'employee',
|
||||
};
|
||||
|
||||
console.log('🔍 Creating user in database...');
|
||||
const newUser = await storage.createUser(userToCreate);
|
||||
console.log('✅ User created successfully:', newUser.username);
|
||||
|
||||
res.json(newUser);
|
||||
} catch (error) {
|
||||
console.error("Error creating user:", error);
|
||||
console.error("❌ Error creating user:", error);
|
||||
console.error("❌ Error type:", error.constructor.name);
|
||||
console.error("❌ Error code:", error.code);
|
||||
console.error("❌ Error constraint:", error.constraint);
|
||||
console.error("❌ Error stack:", error.stack);
|
||||
|
||||
if (error instanceof z.ZodError) {
|
||||
console.log('❌ Validation error:', error.errors);
|
||||
return res.status(400).json({ message: "Invalid user data", errors: error.errors });
|
||||
}
|
||||
|
||||
@@ -958,6 +990,11 @@ export async function registerRoutes(app: Express): Promise<Server> {
|
||||
}
|
||||
}
|
||||
|
||||
// Handle connection errors
|
||||
if (error.code === 'ECONNREFUSED' || error.code === 'ENOTFOUND') {
|
||||
return res.status(503).json({ message: "Database connection error" });
|
||||
}
|
||||
|
||||
res.status(500).json({ message: "Failed to create user" });
|
||||
}
|
||||
});
|
||||
|
||||
+18
-9
@@ -296,15 +296,24 @@ export class DatabaseStorage implements IStorage {
|
||||
}
|
||||
|
||||
async createUser(userData: UpsertUser): Promise<User> {
|
||||
const [user] = await db
|
||||
.insert(users)
|
||||
.values({
|
||||
...userData,
|
||||
createdAt: new Date(),
|
||||
updatedAt: new Date(),
|
||||
})
|
||||
.returning();
|
||||
return user;
|
||||
console.log('🔍 Storage createUser called with:', userData.username);
|
||||
try {
|
||||
const [user] = await db
|
||||
.insert(users)
|
||||
.values({
|
||||
...userData,
|
||||
createdAt: new Date(),
|
||||
updatedAt: new Date(),
|
||||
})
|
||||
.returning();
|
||||
console.log('✅ Storage createUser successful:', user.username);
|
||||
return user;
|
||||
} catch (error) {
|
||||
console.error('❌ Storage createUser error:', error);
|
||||
console.error('❌ Storage error code:', error.code);
|
||||
console.error('❌ Storage error constraint:', error.constraint);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
async updateUser(id: string, userData: Partial<UpsertUser>): Promise<User> {
|
||||
|
||||
Reference in new issue
Block a user