【问题标题】:jwt config secret file push on gitjwt 配置秘密文件推送到 git
【发布时间】:2016-10-03 10:13:37
【问题描述】:

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

我尝试模拟它,但它不起作用,所以:

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

【问题讨论】:

    标签: node.js express config jwt


    【解决方案1】:

    您应该将 config.js 推送到 repo 中。但是你应该这样:

    /*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 时它不起作用,我有这个:Uncaught TypeError: secret must be a string or buffer.
    猜你喜欢
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-03
    • 1970-01-01
    相关资源
    最近更新 更多