【问题标题】:SendGrid API Key is not working. "The provided authorization grant is invalid, expired or revoked"SendGrid API 密钥不起作用。 “提供的授权授权无效、过期或撤销”
【发布时间】:2016-04-19 18:44:40
【问题描述】:

SendGrid 似乎阻止了我的节点 js 服务器发送电子邮件。

我在发送电子邮件的回复中收到此错误消息:

提供的授权无效、过期或撤销

我也有一个 API 密钥设置,并且遵循了文档。

【问题讨论】:

  • 这会更容易调试一些代码;)
  • 这是我之前票证的代码:stackoverflow.com/questions/34788083/…
  • 您能否重新检查您的 apikey,我刚刚将我的修改为不正确并收到问题“[错误:提供的授权授权无效、过期或撤销]”。仔细检查并告诉我。
  • 我已经检查了两倍,看起来还不错
  • @kunalbatra - 还有其他想法吗?

标签: node.js sendgrid


【解决方案1】:

您需要使用 API KEY GENERATED

请勿使用 API 密钥 ID

Sendgrid 仅在您创建时显示生成的密钥一次。

如果您在创建密钥时没有将其记录在某处,则需要创建一个新密钥,然后您可能想删除旧密钥,因为如果您不知道它是什么,它将无用是。

仅供参考:上面屏幕截图中的 API 密钥已被删除。我立即删除了它,所以请不要担心我泄露了那个密钥。

【讨论】:

  • 我明白了,我在哪里可以找到那个?我正在为它搜索发送网格
  • Sendgrid 在创建时只显示生成的密钥一次。如果您在创建密钥时没有将其记录在某处,则需要创建一个新密钥。
  • 他们不会让我参加免费计划。也不让我删除它
  • 我已经给他们发了邮件,希望他们对我的帐户进行排序
  • 点击“删除”几次。这对我两个来说是个小故障。我点了六次“删除”,等了一分钟后刷新页面,终于被删除了。
【解决方案2】:

这是一个较晚的答案并且面向 JAVA.. 但我只是复制了文档并没有注意到..

SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY"));

我只是把我的钥匙放在那里,没有看到 getEnv。当然很傻......但是当试图让事情快速工作时......

【讨论】:

  • new SendGrid("SENDGRID_API_KEY"); 这对我有用。 System.getenv 没有工作。
  • 是的,您的代码只需像这样: SendGrid sg = new SendGrid("YOUR_SENDGRID_API_KEY");没有 System.getenv() 方法!想知道为什么他们仍然在文档中包含它
【解决方案3】:

在 Sendgrid v3 中,我在 Node JS 中使用 env 变量时遇到了类似的问题。如果我使用 env 变量,我会遇到上述问题。但是,如果我将字符串放入 require 进程中,它就会起作用。

不起作用:

SENDGRID_API_KEY=SG.XXXXXXXXXXXXXXXXXXX
var sg = require('sendgrid')(process.env.SENDGRID_API_KEY);

作品

var sg = require('sendgrid')('SG.XXXXXXXXXXXXXXXXXXX');

将 SG.XXXXXXXXXXXXXXXXXXX 替换为 API Key Generated(在密钥生成期间您只能看到一次)。

编辑

注意:确保不要将其保存到公共存储库。如果您这样做,任何人都可以使用您的 API 密钥,并且您的帐户将被 Sendgrid 团队暂时暂停,直到您将其从存储库中删除。

【讨论】:

  • 这个解决方案对我有用,但你知道如何解决这个问题吗?对于使用 .env 文件的开发人员来说,这不是一个好的解决方案。
  • 我遇到了同样的错误。因此,如果有人遇到同样的问题 - 请仔细检查您的 .env 文件。键不应包含在引号 "" 或任何其他分隔符中。应该类似于:SENDGRID_API_KEY = your_key_here
【解决方案4】:
  • 如果您使用的是node js
  • 确保在需要sendgrid/nodemailer 模块的文件中包含require('dotenv').config()行。
  • 没有它,sendgrid 传输器 将有一个undefined 值而不是api_key

【讨论】:

    【解决方案5】:

    对我来说,我只需要生成一个新的 API 密钥。由于某些奇怪的原因,以前的 API 密钥已失效,所以我还为这种情况添加了警报

    【讨论】:

    • 我也是这样。你知道为什么以前的 API 密钥会失效吗?另外,您设置了哪种警报?
    • 不知道为什么会这样,已经半年多了,抱歉不能提供更多有用的信息
    【解决方案6】:

    我遇到了同样的问题,在我验证了我的电子邮件地址并启用了 2FA 后它就消失了。

    【讨论】:

      【解决方案7】:

      在我的情况下,我尝试使用 telnet 调试连接并一直被拒绝。

      原来这两个是不等价的,echo会在编码字符串中包含\n

      echo 'apikey' | base64
      printf 'apikey' | base64
      

      是的,请确保您没有在 API 密钥中包含换行符。

      【讨论】:

      • 感谢您的建议。我在 kubernetes 中使用 SendGrid,需要存储使用 base64 加密的 apikey 值。这几天我一直为此发疯,而这正是发生在我身上的事情。
      【解决方案8】:

      这是我的解决方案:

      1. 安装 dotenv 包:npm i dotenv

      2. 转到应用程序的最早入口点(即 index.js)并将其放在顶部:

        const dotenv = require('dotenv').config();

      3. 创建一个 .env 文件并添加 SENDGRID_API_KEY=。没有引号 '' 或 ""。

      4. 在您使用 sendgrid 的文件中,将其添加到顶部:

        const sgMail = require('@sendgrid/mail');

        sgMail.setApiKey(process.env.SENDGRID_API_KEY);

      完成。

      【讨论】:

        猜你喜欢
        • 2017-03-20
        • 2019-03-29
        • 2019-11-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-16
        相关资源
        最近更新 更多