在node.js服务器上validation客户端Firebase令牌

我正在使用express.js for REST和Firebase来实现一个node.js服务器来存储数据。

我已经阅读使用与Firebase的安全NodeJs ,它可以以这种方式实现,但在我的情况下,我需要发送数据到服务器和服务器必须返回一个redirect地址,所以使用firebase作为沟通渠道有点复杂。

目前,我正在通过发送Firebase身份validation令牌作为查询参数,并使用Firebase身份validation()方法检查授权来validation服务器上的客户端身份。

dataRef.auth(CLIENT_TOKEN, function(error) { if(error) { console.log("Login Failed!", error); } else { console.log("Login Succeeded!"); } }); 

问题是,在服务器我也需要firebase的“pipe理员”权限。 为了实现这一点,我需要使用pipe理令牌使用Firebase身份validation()再次进行身份validation。 (由firebase-token-generator生成)

 var FirebaseTokenGenerator = require("firebase-token-generator"); var tokenGenerator = new FirebaseTokenGenerator(YOUR_FIREBASE_SECRET); var token = tokenGenerator.createToken({some: "arbitrary", data: "here"}); 

我注意到在auth()方法中有一个限制:

请注意,所有对Firebase的引用都具有相同的身份validation状态。 因此,如果您调用两次新的Firebase()并在其中一个上调用auth(),则它们都将被authentication。

有没有办法实现这一点,而不是调用auth()两次?

还是有更好的解决scheme来做到这一点?

基于评论和实施后,似乎最好的解决scheme是使用通用的JWT库,如: https : //github.com/hokaccha/node-jwt-simple

在图书馆的帮助下,您可以使用Firebase秘密对令牌进行解码:

 // decode var decoded = jwt.decode(token, secret); console.log(decoded); //=> {"v":0,"iat":1359943067,"d":{"id":"user@fb,com"}} 

解码的令牌包含iat(at),并且可能包含exp(expires)。 如果未提供exp,则firebase令牌的默认到期时间为24小时。 您需要检查令牌是否已过期。

更多详情请访问: https : //www.firebase.com/docs/security/custom-login.html