如何为 Firebase Dynamic Link Analytics Rest API (NodeJS) 获取正确的访问令牌

Posted

技术标签:

【中文标题】如何为 Firebase Dynamic Link Analytics Rest API (NodeJS) 获取正确的访问令牌【英文标题】:How to get the correct acces token for Firebase Dynamic Link Analytics Rest API (NodeJS) 【发布时间】:2017-10-18 13:07:41 【问题描述】:

我的 access_token 有问题,我通过 serveracceskey 获得。这是我在 NodeJS 中的代码:

const admin = require('firebase-admin');
var request = require("request");
const serviceAccount = require('./serverAccountKey.json');
const credential =  admin.credential.cert(serviceAccount);

  credential.getAccessToken().then((accessTokenInfo) => 
  const accessToken = accessTokenInfo.access_token;
  const expirationTime = accessTokenInfo.expires_in;
  console.log("accessToken " + accessToken );
  console.log("expirationTime " +expirationTime);

    var s = "Bearer " + accessToken;
    request(
    headers:
        'Authorization': s
    ,
    uri:"https://firebasedynamiclinks.googleapis.com/v1/SHORTLINK/linkStats?durationDays=7",
    method: "GET",

    , function(error, response, body) 
        console.log(body);
    );
);

结果如下:


    "error": 
        "code": 403,
        "message": "Request had insufficient authentication scopes.",
        "status": "PERMISSION_DENIED"
    

我做错了什么?我也在 Postman 中测试链接。出了点问题,我阅读了所有 firebase Rest API Doc。

【问题讨论】:

这是一个严重的错误,firebase 团队应该修复它。如果我们无法进行分析,Firebase 动态链接将毫无用处。与通常的缩短网址有什么区别? 【参考方案1】:

Admin SDK 创建具有一组特定范围的令牌:https://github.com/firebase/firebase-admin-node/blob/master/src/auth/credential.ts#L272

显然,动态链接 API 需要令牌中的其他 OAuth2 范围。对于这个用例,你最好使用一些 OAuth2 库。如果您使用的是 Java 或 Python,Google Cloud 会为您提供处理此问题的库。

【讨论】:

感谢您的回复。正如你提到的 access_token 需要范围,我放了其中一个,但我仍然得到同样的错误。我读了很多文档。(firebase.google.com/docs/reference/dynamic-links/analytics)。我需要知道哪个范围最适合提供分析响应。 我们打开了内部问题以改进示例代码/文档。 我知道,但我找不到此问题的组件,我无法创建问题,对于 Firebase 组件,我没有创建问题的权限。【参考方案2】:

我与一位乐于助人的 GitHub 用户一起解决了这个问题。如果有人遇到同样的问题,请点击此链接它会有所帮助。 https://github.com/firebase/firebase-admin-node/issues/111

【讨论】:

以上是关于如何为 Firebase Dynamic Link Analytics Rest API (NodeJS) 获取正确的访问令牌的主要内容,如果未能解决你的问题,请参考以下文章

dynamic_link_first_open 事件是不是也会触发 first_open?

如何为firebase字段添加价值

如何为 Swift 配置 Firebase 并读出数据

如何为 Firebase 添加通知服务扩展?

如何为分析添加 Firebase 自定义事件?

Firebase:如何为键生成唯一的数字 ID?