提问者:小点点

node. js服务器和android客户端中的Firebase admin sdk中的自定义令牌生成错误


我正在我的node. js服务器中使用fire base admin-sdk来生成自定义令牌。以下是它的代码。

var admin = require("firebase-admin"),
express   = require("express"),
app       = express(),
bodyParser= require("body-parser"),
serviceAccount =  require("./skill-india-3e512-firebase-adminsdk-m4kyy-40528dd641.json"),
rot            =  require("rot");

app.use(bodyParser.urlencoded({extended: true,}));
app.use(express.static("public"));

console.log(serviceAccount);
console.log(admin);
admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://skill-india-3e512.firebaseio.com/"
});

app.get("/", function(req,res){
  console.log("Skill India Backend");
})


app.get("/id-tokens/:idToken/:registrationToken", function(req,res){
  // Receiving id-tokens
  var idToken = rot(req.params.idToken, -13);
  var registrationToken = rot(req.params.registrationToken, -13);

  console.log("idToken: " + idToken);
  console.log("registrationToken: " + registrationToken);

  admin.auth().verifyIdToken(idToken).then(function(decodedToken) {
      var uid = decodedToken.uid;
      console.log(uid);

      admin.auth().createCustomToken(uid)
        .then(function(customToken) {

          var payload = {
        $sceDelegate    data: {
              MyKey1: customToken
            }
          };

          var options = {
            priority: "high",
            tmeToLive: 60 * 60 * 24
          };

          console.log("customToken: ", customToken);

          admin.messaging(),sendToDevice(registrationToken, payload, options)
            .then(function(response){
              console.log("Successfully Sent");
            })
            .catch(function(error){
              console.log("Error Encountered: " , error);
            });

        }).catch(function(error) {
          console.log("Error creating custom token:", error);
        });
    })

    .catch(function(error) {
      console.log("Error receiving tokens");
    });

});

app.listen(3000, function(){
  console.log("Server Started!");
})

我通过超文本传输协议接收idToken和注册令牌,生成自定义令牌后,我将通过FCM(Firebase云消息)将其发送回客户端,但我无法生成uid。

身份令牌的验证不起作用。我在localhost上这样做,并使用ngrok制作超文本传输协议请求的网址。这是我第一次使用Firebase admin-sdk,因此任何帮助都将不胜感激。

我收到这个错误=


共1个答案

匿名用户

我现在已经解决了…问题是异步….下一个函数在uid形成之前被调用。

抱歉打扰了。要解决这个问题,只需将下一个函数放在first中,以便首先形成uid。:)