从 .env 文件中获取我的身份验证密钥,但它缺少字符

Posted

技术标签:

【中文标题】从 .env 文件中获取我的身份验证密钥,但它缺少字符【英文标题】:Fetching my auth key from an .env file and it is missing characters 【发布时间】:2020-01-02 14:07:24 【问题描述】:

在 mac 机器上,运行没有问题,但在 windows 机器上,它开始崩溃并且没有明显的原因。 在 Windows 1 上,它返回缺少字符的键。 在我的 env 文件中,我有以下内容(身份验证密钥是一个示例)。

AUTH_KEY=ec4$t2VmVoCxW1thpi0tcCW1FdeWla1y2UI16Kxj$u5hBm$FQDuBXJV/lYWo

我正在通过以下方式获取数据:

process.env.AUTH_KEY;

如果您有任何想法,我将不胜感激。

【问题讨论】:

你在用create-react-app吗? @onuriltan 是的。 @IvanVasilev 您是否尝试过 onuriltan 发布的答案,如果您需要知道为什么会根据需要更新它,它应该可以工作 【参考方案1】:

你应该把 REACT_APP_ 放在环境变量的开头,比如

.env

REACT_APP_AUTH_KEY=ec4$t2VmVoCxW1thpi0tcCW1FdeWla1y2UI16Kxj$u5hBm$FQDuBXJV/lYWo

并在你的组件中使用它作为

component.js

let key = process.env.REACT_APP_AUTH_KEY

【讨论】:

我也在使用 parcel 来构建/运行应用程序,即使没有以'REACT_APP_'作为前缀的密钥也会返回密钥。但它在'\'之后被切断,它应该是Windows的东西,因为在Mac机器上它可以工作并且不会切断字符串。【参考方案2】:

由于您使用的是 CRA(create-react-app),因此您需要为 env 变量添加 REACT_APP 前缀。

所以你的情况

代替

AUTH_KEY=ec4$t2VmVoCxW1thpi0tcCW1FdeWla1y2UI16Kxj$u5hBm$FQDuBXJV/lYWo

需要更新为

REACT_APP_AUTH_KEY=ec4$t2VmVoCxW1thpi0tcCW1FdeWla1y2UI16Kxj$u5hBm$FQDuBXJV/lYWo

然后在代码中你可以访问process.env.REACT_APP_AUTH_KEY;

详细说明

首先要明确一点,浏览器环境内部是没有环境变量这种东西的。我们现在使用的任何解决方案都不过是一种虚假的抽象。

但是,您可能会问,直接来自文档的 .env 文件和带有 REACT_APP 前缀的环境变量呢?即使在源代码中,这些也被用作 process.env,就像我们在 Node.js 中使用环境变量一样。

实际上,对象进程并不存在于浏览器环境中,它是特定于节点的。默认情况下,CRA 不进行服务器端渲染。它不能在内容服务期间注入环境变量(就像 Next.js 一样)。在转译期间,Webpack 进程将所有出现的 process.env 替换为给定的字符串值。

【讨论】:

我也在使用 parcel 来构建/运行应用程序,即使没有以'REACT_APP_'作为前缀的密钥也会返回密钥。但它在'\'之后被切断,它应该是Windows的东西,因为在Mac机器上它可以工作并且不会切断字符串。 好吧可能是转义字符问题 是的,我想是的,试图找到解决方案,但我找到的解决方案不起作用。 @IvanVasilev 你试过这个吗? ***.com/questions/20635695/… 刚检查出来,我的字符串不包含'、|、&或^',我尝试在cmd中回显它并正确打印出来,它之前工作过,它突然停止工作,这是奇怪的部分,也许是 Windows 更新,我不知道。不过感谢您的帮助!【参考方案3】:

我也遇到了同样的问题,我的.env 数据被切断了。我相信这可能是由于您将其复制并粘贴到.env file 时出现的自动换行/换行所致。我设法解决了它,将字符串复制到记事本并手动打破自动换行。之后这对我有用,但它可能相当乏味。我想一种更简单的方法可能是以编程方式设置.env 文件中的变量,以防止该错误。这个链接应该可以帮助https://***.com/a/59198410/14631246

但是,我不得不对该答案进行一些编辑并实现换行方法来删除换行符。

fs.appendFileSync(
  "file_name",
  `ENV_NAME=$VALUE_TO_STORE.replace(/(\r\n|\n|\r)/gm, "")`
);

【讨论】:

以上是关于从 .env 文件中获取我的身份验证密钥,但它缺少字符的主要内容,如果未能解决你的问题,请参考以下文章

从安全上下文中获取当前经过身份验证的用户作为 Spring Cache 的密钥

带有 Postman 的 FCM - 请求缺少身份验证密钥(FCM 令牌)

应用程序身份验证 - 从命令行提取公共签名密钥

如何使用带有密码的 SSH 密钥身份验证“去获取”私有存储库

收到错误:AWS API 请求后缺少身份验证令牌

从 Zapier 对 Monday.com API 进行身份验证