最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

next.js - POST api route authentication doesnt work on cpanel - Stack Overflow

programmeradmin2浏览0评论

I am trying to make a simple login api, that works PERFECTLY on localhost.

My server is hosted on cpanel, and while Get routes works well, the login POST routes just get 404 error when I put my username and password.

Backend route.ts in api/auth/login/route.ts is:

export async function POST(req: NextRequest) {

  console.log('POST en /api/auth/login'); // Log de prueba
  try {
    // Obtén los datos de la solicitud
    const { name, password } = await req.json();

    // Log de los datos recibidos
    console.log('Datos recibidos en la API:', { name, password });

    if (!name || !password) {
      console.log('Credenciales incompletas');
      return NextResponse.json({ message: 'Nombre de usuario y contraseña son obligatorios' }, { status: 400 });
    }

    // Intento de autenticación
    const { user, token } = await authenticateUser(name, password);

    // Log de lo que retorna la autenticación
    console.log('Usuario autenticado:', user);
    console.log('Token generado:', token);

    return NextResponse.json({ user, token }, { status: 200 });
  } catch (error) {
    // Log de error si algo sale mal
    console.log('Error durante la autenticación:', error);

    return NextResponse.json({ message: error instanceof Error ? error.message : "Error desconocido" }, { status: 400 });
  }
}

Auth.ts looks like this:

// Función para generar el token JWT
export const generateToken = async (userId: number): Promise<string> => {
  console.log("Generando token para userId:", userId);
  return new Promise((resolve, reject) => {
    jwt.sign({ userId }, JWT_SECRET, { expiresIn: "1h" }, (err, token) => {
      if (err) {
        console.error("Error al generar token:", err);
        reject(err);
      } else {
        console.log("Token generado correctamente:", token);
        resolve(token as string);
      }
    });
  });
};


export const authenticateUser = async (name: string, password: string) => {
  try {
    console.log("Iniciando autenticación para usuario:", name);  
    console.log("Conectando con la base de datos...");
    const user = await prisma.user.findUnique({
      where: { name }
    });
    console.log("Usuario encontrado en la base de datos:", user);
    if (!user) {
      console.log("Usuario no encontrado en la base de datos");
      throw new Error("Usuario no encontrado");
    }
    console.log("Comparando contraseñas...");
    const isMatch = await bcryptpare(password, user.password);
    console.log("Resultado de la comparación de contraseñas:", isMatch);
    if (!isMatch) {
      console.log("La contraseña no coincide");
      throw new Error("Contraseña incorrecta");
    }
    console.log("Usuario autenticado con éxito, generando token...");
    const token = await generateToken(user.id);
    console.log("Autenticación completada, devolviendo usuario y token");
    return { user, token };
  } catch (error) {
    console.error("Error durante la autenticación:", error);
    throw new Error(error instanceof Error ? error.message : "Error desconocido en la autenticación");
  }
};




// Función para verificar si el token es válido
export const verifyToken = (token: string): { userId: number } | null => {
  try {
    console.log("Verificando token...");
    const decoded = jwt.verify(token, JWT_SECRET) as jwt.JwtPayload;
    console.log("Token verificado, payload decodificado:", decoded);
    return decoded.userId ? { userId: decoded.userId } : null;
  } catch (error) {
    console.error("Error al verificar el token:", error instanceof Error ? error.message : error);
    return null;
  }
};

Frontend form fuction:

 const handleLogin = async (e: React.FormEvent) => {
    e.preventDefault();
    const response = await fetch('/api/auth/login', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({ name, password }),
    });
    if (response.ok) {
      const data = await response.json();
      localStorage.setItem('token', data.token);
      router.push('/admin');
    } else {
      alert('Wrong Credentials');
    }
  };

发布评论

评论列表(0)

  1. 暂无评论