fcmTokens和ID Tokens相同吗?如何将Node.js作为云函数进行验证



我的应用程序使用分配给用户并存储在Firestore文档中的fcmToken来跟踪应用程序的安装和登录。当用户注销应用程序时,我会从Firestore文档中删除fcmToken并运行InstanceID.instanceID().deleteID

但是,当用户的internet不正确时,"InstanceID.InstanceID((.deleteID"将在应用下次启动时再次运行。在这种情况下,不会删除Firestore文档中的fcmToken。理论上,我也可以在应用程序中运行查询,在所有Firestore用户文档中搜索该令牌,并在那里删除它,但我更愿意使用云函数来检查用户的fcmToken是否仍然有效。如果没有,我想删除它们。我开始写下面的云函数,但我收到一个错误,说

解码Firebase ID令牌失败。确保您传递了表示ID令牌的整个字符串JWT。看见https://firebase.google.com/docs/auth/admin/verify-id-tokens有关如何检索ID令牌的详细信息。

我认为我使用了错误的函数,fcmTokens与ID Tokens不一样?有没有一种方法可以检查fcmToken的有效性,就像我在这里检查(不存在的(ID Token一样。或者我应该以某种方式使用ID令牌来管理特定于设备的登录吗?(我使用的是一个快照侦听器,它侦听fcmToken的更改,当特定的fcmToken被删除时,我会将用户注销。(

这是我的云功能:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
var userA_UID = ""
exports.checkFcmToken = functions.firestore.document('registeredUsers/{userA_UID}').onUpdate(async (snapshot, context) => {
userA_UID = context.params.userA_UID;
const userInfo = await admin.firestore().collection('registeredUsers').doc(userA_UID).get();
const fcmTokens = userInfo.data()['fcmTokens'];
if (fcmTokens !== undefined) {
if (fcmTokens.length > 0) {
for (let fcmToken of fcmTokens) {
checkToken(fcmToken)
}
}
}
function checkToken(fcmToken) {
//will delete token from document array if invalid
admin.auth().verifyIdToken(fcmToken)
.then((decodedToken) => {
let uid = decodedToken.uid;
console.log(uid)
throw new Error('Error!')
}).catch((error) => {
console.log(error)
});
}
})

FCM令牌和ID令牌非常不同,不能互换使用。

  • Firebase身份验证ID令牌标识用户。这意味着,如果同一用户在两个不同的设备上登录,则它们具有标识同一用户的ID令牌
  • FCM令牌(也称为实例ID令牌(标识应用程序安装。如果您有来自两个不同设备的两个令牌,则这些令牌之间没有任何共享内容

FCM令牌是不透明的字符串,在不调用FCM API的情况下无法验证。

当您向过期的令牌发送消息时,FCM API会以一条明确的错误消息进行响应。保持令牌列表干净的惯用方法是处理此错误消息并删除过时的令牌,如本例所示,从Cloud Functions repo中删除。

相关内容

  • 没有找到相关文章

最新更新