node.js服务器和android客户端

时间:2018-01-15 15:18:23

标签: node.js firebase firebase-cloud-messaging firebase-admin

我在node.js服务器中使用firebase 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!");
})

我通过http接收idToken和registrationToken,在生成自定义令牌后,我将通过FCM(Firebase云消息传递)将其发送回客户端,但我仍然无法生成uid。

id-tokens的验证无效。我在我的localhost上执行此操作并使用ngrok使URL发出http请求。 这是我第一次使用firebase admin-sdk,所以任何帮助都会受到赞赏。

我收到此错误=>收到令牌时出错。

1 个答案:

答案 0 :(得分:0)

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

对不起,不好意思。 要解决这个问题,只需将下一个函数放在第一个函数中,以便首先形成uid。 :)