es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

FirebaseAppError: no se pudo analizar la clave privada: error: mensaje con formato pem no válido

Obtuve este error firebaseapperror: error al analizar la clave privada: error: mensaje con formato PEM no válido cuando cargué mi aplicación de Node.js en Heroku.

Tenía todas mis variables de entorno configuradas de esta manera:

# Archivo .env

project_id=project_id
private_key='-----BEGIN PRIVATE KEY----- ... ------END PRIVATE KEY-----\n'
client_email=client_email

Y accedí a ellas de esta forma:

export const sa = {
    privateKey: process.env.private_key,
    projectId: process.env.project_id,
    clientEmail: process.env.client_email
};

En mi entorno local todo funcionaba bien, pero en producción (heroku) obtuve el error mencionado anteriormente. La clave privada es una variable de entorno de varias líneas y no pudo ser analizada.

Por favor, ¿cómo puedo solucionar esto?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema aquí es que la variable de entorno de clave privada es una variable multilínea y parece que Heroku no puede analizarla correctamente. Una solución para este problema es convertir la clave privada en una cadena de una sola línea reemplazando todos los caracteres '\n' por caracteres de nueva línea reales.

    Para hacer esto, puedes modificar tu archivo .env para que se vea así:

    project_id=project_id
    private_key="-----BEGIN PRIVATE KEY----- ... ------END PRIVATE KEY-----\\n"
    client_email=client_email
    

    Ten en cuenta que el valor de private_key ahora está rodeado por comillas dobles en lugar de comillas simples, y el carácter '\n' se ha escapado con una doble barra invertida ('\\n').

    Luego, en tu código, puedes modificar el objeto sa para reemplazar cualquier carácter de nueva línea escapado por caracteres de nueva línea reales de esta manera:

    export const sa = {
        privateKey: process.env.private_key.replace(/\\n/gm, '\n'),
        projectId: process.env.project_id,
        clientEmail: process.env.client_email
    };
    

    El método replace toma una expresión regular '/\\n/gm' y reemplaza todas las apariciones del carácter de nueva línea escapado '\n' con un carácter de nueva línea real '\n'.

    Con estas modificaciones, tus variables de entorno deberían ser analizadas correctamente en Heroku y ya no deberías obtener el error failed to parse private key: error: invalid pem formatted message.

Comments are closed.