mirror of
https://github.com/freedbygrace/ActiveDirectoryManager.git
synced 2026-08-21 07:37:32 +00:00
Add simplified user registration endpoint.
Replit-Commit-Author: Agent Replit-Commit-Session-Id: 705f2157-ef97-4fbd-89e4-8c7f2ecaea90 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/7ed01c5f-a82d-405a-b728-b2e3d127c60c/6d7c58e6-0cd9-4f69-81f7-091dce31abab.jpg
This commit is contained in:
@@ -100,18 +100,29 @@ export default function AuthPage() {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
// Register mutation
|
// Register mutation - using our simplified endpoint
|
||||||
const registerMutation = useMutation({
|
const registerMutation = useMutation({
|
||||||
mutationFn: async (credentials: any) => {
|
mutationFn: async (credentials: any) => {
|
||||||
const res = await apiRequest("POST", "/api/register", credentials);
|
try {
|
||||||
return await res.json();
|
const res = await apiRequest("POST", "/api/simple-register", credentials);
|
||||||
|
if (!res.ok) {
|
||||||
|
const errorData = await res.json();
|
||||||
|
throw new Error(errorData.message || "Registration failed");
|
||||||
|
}
|
||||||
|
return await res.json();
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Registration error:", error);
|
||||||
|
throw error instanceof Error ? error : new Error("Unknown registration error");
|
||||||
|
}
|
||||||
},
|
},
|
||||||
onSuccess: (user) => {
|
onSuccess: (response) => {
|
||||||
toast({
|
toast({
|
||||||
title: "Registration successful",
|
title: "Registration successful",
|
||||||
description: `Welcome, ${user.username}!`,
|
description: response.message || `Welcome, ${response.username}!`,
|
||||||
});
|
});
|
||||||
navigate('/');
|
// Switch to login tab automatically
|
||||||
|
const loginTab = document.querySelector('[data-state="inactive"][data-value="login"]') as HTMLElement;
|
||||||
|
if (loginTab) loginTab.click();
|
||||||
},
|
},
|
||||||
onError: (error: Error) => {
|
onError: (error: Error) => {
|
||||||
toast({
|
toast({
|
||||||
|
|||||||
@@ -24,6 +24,72 @@ export async function registerRoutes(app: Express): Promise<Server> {
|
|||||||
// Initialize Role Based Access Control system
|
// Initialize Role Based Access Control system
|
||||||
await initializeRBAC();
|
await initializeRBAC();
|
||||||
|
|
||||||
|
// Simple registration endpoint that bypasses the complex auth system
|
||||||
|
app.post("/api/simple-register", async (req, res) => {
|
||||||
|
try {
|
||||||
|
console.log("Simple registration attempt:", { ...req.body, password: "***" });
|
||||||
|
|
||||||
|
const { username, password, email, fullName } = req.body;
|
||||||
|
|
||||||
|
if (!username || !password) {
|
||||||
|
return res.status(400).json({ message: "Username and password are required" });
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for existing user
|
||||||
|
try {
|
||||||
|
const existingUser = await storage.getUserByUsername(username);
|
||||||
|
if (existingUser) {
|
||||||
|
console.log("Username already exists:", username);
|
||||||
|
return res.status(400).json({ message: "Username already exists" });
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error checking for existing user:", error);
|
||||||
|
return res.status(500).json({ message: "Error checking for existing user" });
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set a default role ID
|
||||||
|
// In our system, roleId 2 is the standard user role
|
||||||
|
const roleId = 2; // Regular user role
|
||||||
|
console.log("Using default role ID:", roleId);
|
||||||
|
|
||||||
|
// Hash the password
|
||||||
|
let hashedPassword;
|
||||||
|
try {
|
||||||
|
const salt = require('crypto').randomBytes(16).toString('hex');
|
||||||
|
const hash = require('crypto').scryptSync(password, salt, 64).toString('hex');
|
||||||
|
hashedPassword = `${hash}.${salt}`;
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error hashing password:", error);
|
||||||
|
return res.status(500).json({ message: "Error processing password" });
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create the user
|
||||||
|
try {
|
||||||
|
const user = await storage.createUser({
|
||||||
|
username,
|
||||||
|
password: hashedPassword,
|
||||||
|
email: email || null,
|
||||||
|
fullName: fullName || null,
|
||||||
|
roleId: roleId,
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log("User created successfully:", { id: user.id, username });
|
||||||
|
|
||||||
|
const userResponse = { ...user, password: undefined };
|
||||||
|
return res.status(201).json({
|
||||||
|
...userResponse,
|
||||||
|
message: "Registration successful, please log in"
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error creating user:", error);
|
||||||
|
return res.status(500).json({ message: "Error creating user in database" });
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Unexpected error during simple registration:", error);
|
||||||
|
return res.status(500).json({ message: "Internal server error during registration" });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// Error handler for Zod validation errors
|
// Error handler for Zod validation errors
|
||||||
const handleZodError = (err: ZodError, res: Response) => {
|
const handleZodError = (err: ZodError, res: Response) => {
|
||||||
return res.status(400).json({
|
return res.status(400).json({
|
||||||
|
|||||||
Reference in New Issue
Block a user