Node.js jwt配置秘密文件在git上推送

Node.js jwt配置秘密文件在git上推送,node.js,express,config,jwt,Node.js,Express,Config,Jwt,我在一个节点上工作,使用JWT(json web令牌)表示mongoose API。我不会推送我的config.js文件来保密我的密钥(.gitignore->config.js),但是当travis使用mocha运行我的测试时,它返回错误:找不到模块。 我试图模仿它,但它不起作用,所以: 我可以推送我的config.js文件,这不是不安全的吗 如何模拟我的require dependency config.js 您应该在repo中推送config.js。但你应该这样做: /*jshint e

我在一个节点上工作,使用JWT(json web令牌)表示mongoose API。我不会推送我的
config.js
文件来保密我的密钥(.gitignore->config.js),但是当travis使用mocha运行我的测试时,它返回错误:
找不到模块。

我试图模仿它,但它不起作用,所以:

  • 我可以推送我的config.js文件,这不是不安全的吗
  • 如何模拟我的require dependency config.js

您应该在repo中推送config.js。但你应该这样做:

/*jshint esversion: 6 */
'use strict';

module.exports = function () {
    return {
        SERVER_HOST: process.env.HOST,
        OTP: {
            LENGTH: 6,
            DURATION: 300000, //ms
        },
        TWILIO: {
            ACCOUNT_SID: process.env.TWILIO_ACCOUNT_SID,
            AUTH_TOKEN: process.env.TWILIO_AUTH_TOKEN,
            MESSAGE_FROM: process.env.TWILIO_MESSAGE_FROM
        },
        JWT: {
            SECRET: process.env.JWT_SECRET,
            ALGORITHM: 'HS512',
            ISSUER: 'GOHAN'
        },
        BCRYPT: {
            SALT_ROUNDS: 10
        },
        EMAIL: {
            USER: process.env.EMAIL_USER,
            PASSWORD: process.env.EMAIL_PASSWORD
        },
        REDIS: {
            HOST: process.env.REDIS_HOST,
            PORT: process.env.REDIS_PORT
        },
        AWS: {
            ACCESS_KEY_ID: process.env.AWS_ACCESS_KEY_ID,
            SECRET_ACCESS_KEY: process.env.AWS_SECRET_ACCESS_KEY,
            S3: {
                PROFILE_PIC_BUCKET: process.env.AWS_S3_PROFILE_PIC_BUCKET,
                VOICE_MESSAGES_BUCKET: process.env.AWS_S3_VOICE_MESSAGES_BUCKET,
                REGION: process.env.AWS_S3_REGION,
                SIGNED_URL_EXPIRY: 900
            }
        },
        TCP_SERVER: {
            PASSWORD: process.env.TCP_SERVER_PASSWORD
        },
        GOOGLE_API_KEY: process.env.GOOGLE_API_KEY,
        APN: {
            CONNECTION: {
                production: (process.env.NODE_ENV === 'production'),
                cert: process.env.APN_CERT,
                passphrase: process.env.APN_PASSPHRASE,
                key: process.env.APN_CERT
            },
            FEEDBACK: {
                address: process.env.APN_FEEDBACK_ADDRESS,
                cert: process.env.APN_CERT,
                key: process.env.APN_CERT,
                passphrase: process.env.APN_PASSPHRASE,
                interval: process.env.APN_INTERVAL,
                batchFeedback: process.env.APN_BATCHFEEDBACK
            }
        },
        FCM: {
            API_KEY: process.env.FCM_API_KEY,
            RETRY_LIMIT: 3
        }
    };
};
所有代码都应该独立于环境,这是环境变量的目的。不是为了确保安全

您可以在运行应用程序之前加载环境变量

对于测试、开发和产品环境,您也可以有不同的.env文件

编辑:
上面的config.js来自我的一个项目。

您应该在repo中推送config.js。但你应该这样做:

/*jshint esversion: 6 */
'use strict';

module.exports = function () {
    return {
        SERVER_HOST: process.env.HOST,
        OTP: {
            LENGTH: 6,
            DURATION: 300000, //ms
        },
        TWILIO: {
            ACCOUNT_SID: process.env.TWILIO_ACCOUNT_SID,
            AUTH_TOKEN: process.env.TWILIO_AUTH_TOKEN,
            MESSAGE_FROM: process.env.TWILIO_MESSAGE_FROM
        },
        JWT: {
            SECRET: process.env.JWT_SECRET,
            ALGORITHM: 'HS512',
            ISSUER: 'GOHAN'
        },
        BCRYPT: {
            SALT_ROUNDS: 10
        },
        EMAIL: {
            USER: process.env.EMAIL_USER,
            PASSWORD: process.env.EMAIL_PASSWORD
        },
        REDIS: {
            HOST: process.env.REDIS_HOST,
            PORT: process.env.REDIS_PORT
        },
        AWS: {
            ACCESS_KEY_ID: process.env.AWS_ACCESS_KEY_ID,
            SECRET_ACCESS_KEY: process.env.AWS_SECRET_ACCESS_KEY,
            S3: {
                PROFILE_PIC_BUCKET: process.env.AWS_S3_PROFILE_PIC_BUCKET,
                VOICE_MESSAGES_BUCKET: process.env.AWS_S3_VOICE_MESSAGES_BUCKET,
                REGION: process.env.AWS_S3_REGION,
                SIGNED_URL_EXPIRY: 900
            }
        },
        TCP_SERVER: {
            PASSWORD: process.env.TCP_SERVER_PASSWORD
        },
        GOOGLE_API_KEY: process.env.GOOGLE_API_KEY,
        APN: {
            CONNECTION: {
                production: (process.env.NODE_ENV === 'production'),
                cert: process.env.APN_CERT,
                passphrase: process.env.APN_PASSPHRASE,
                key: process.env.APN_CERT
            },
            FEEDBACK: {
                address: process.env.APN_FEEDBACK_ADDRESS,
                cert: process.env.APN_CERT,
                key: process.env.APN_CERT,
                passphrase: process.env.APN_PASSPHRASE,
                interval: process.env.APN_INTERVAL,
                batchFeedback: process.env.APN_BATCHFEEDBACK
            }
        },
        FCM: {
            API_KEY: process.env.FCM_API_KEY,
            RETRY_LIMIT: 3
        }
    };
};
所有代码都应该独立于环境,这是环境变量的目的。不是为了确保安全

您可以在运行应用程序之前加载环境变量

对于测试、开发和产品环境,您也可以有不同的.env文件

编辑:
上面的config.js来自我的一个项目。

不可能只为我的测试创建config.spec.js文件吗?当我在应用程序中删除config.js时,它不起作用,我有这样一个:uncaughttypeerror:secret必须是字符串或缓冲区。不能仅为我的测试创建config.spec.js文件?当我在应用程序中删除config.js时,它不起作用,我有这样一个:uncaughttypeerror:secret必须是字符串或缓冲区。