You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Heroku上安全存储敏感数据?——关联GitHub的Heroku项目使用nodemailer的敏感信息处理方案

当然有完美的解决方案啦!

这是部署Node.js应用时处理敏感信息的标准操作,结合你用Heroku+GitHub的场景,我给你一步步拆解:

核心思路:用环境变量存储敏感数据

环境变量是系统/平台层面存储的键值对,你的代码可以直接调用,但这些值不会出现在你的代码仓库里,完美解决公开仓库的敏感信息泄露问题。

第一步:在Heroku上配置环境变量

你有两种方式设置:

  • 通过Heroku网页控制台:登录Heroku后进入你的应用,切换到「Settings」标签,往下找到「Config Vars」区域,点击「Reveal Config Vars」,然后添加两组键值对:
    • 键:EMAIL_USER,值:你的邮箱地址(比如xxx@gmail.com
    • 键:EMAIL_PASS,值:你的邮箱授权码/密码(注意:如果是Gmail这类开启两步验证的邮箱,一定要用「应用专用密码」,而不是原始登录密码
  • 通过Heroku CLI命令:打开终端,运行以下命令直接设置:
    heroku config:set EMAIL_USER=your-email@example.com EMAIL_PASS=your-app-specific-password
    

第二步:本地开发时的敏感数据处理

本地调试时也需要用到这些变量,我们可以用dotenv包来管理本地的.env文件:

  1. 安装依赖:在项目根目录运行
    npm install dotenv --save-dev
    
  2. 在项目根目录创建一个.env文件,内容如下:
    EMAIL_USER=your-email@example.com
    EMAIL_PASS=your-app-specific-password
    
  3. 在你的Node.js入口文件(比如app.jsserver.js)的最顶部添加一行代码,让Node.js读取.env里的变量:
    require('dotenv').config();
    

第三步:在代码中调用环境变量

不管是本地开发还是Heroku部署,你都可以通过process.env对象来获取这些变量,比如nodemailer的配置代码可以写成:

const nodemailer = require('nodemailer');

// 创建邮件传输器
const transporter = nodemailer.createTransport({
  service: 'Gmail', // 根据你的邮箱服务商调整,比如'Outlook'
  auth: {
    user: process.env.EMAIL_USER, // 读取环境变量里的邮箱
    pass: process.env.EMAIL_PASS  // 读取环境变量里的密码/授权码
  }
});

第四步:确保敏感文件不被提交到GitHub

最后一步至关重要:把.env文件加入.gitignore,这样Git就不会追踪这个文件,避免误提交到公开仓库。

  • 如果你的项目还没有.gitignore文件,直接在根目录创建一个,至少包含以下内容:
    node_modules/
    .env
    
  • 如果已经有.gitignore,直接添加.env这一行即可。

额外注意事项

  • 永远不要把.env文件分享给他人,也不要手动把它添加到Git提交里。
  • Heroku的Config Vars是加密存储的,只有你的应用实例能访问,安全性有保障。
  • 对于主流邮箱服务商(如Gmail、Outlook),建议优先使用「应用专用密码」,避免泄露主账号密码。

内容的提问来源于stack exchange,提问作者Kon kons

火山引擎 最新活动