Nodejs Firebase和Angular4authentication

我有一个客户端应用程序,用angular4编写,与firebase服务器通信。 目前,我正在尝试将一个nodejs与firebase集成,以便与客户端应用程序进行通信。

Firebase <—->客户端(Angular4)<—-> NodeJs(firebase-admin)<—-> Firebase

我已经设置了一个fire-adminconfiguration:

var admin = require("firebase-admin"); var serviceAccount = require("./server/myfile.json"); admin.initializeApp({ credential: admin.credential.cert(serviceAccount), databaseURL: "https://mydb.firebaseio.com" }); 

并能够像这样检索数据:

  var db = admin.database(); var ref = db.ref("messages"); ref.once("value", function(snapshot) { console.log(snapshot.val()); }); 

但是,我怎么能检查NodeJS服务器是否在客户端应用程序中的用户已经login ? 我需要这个NodeJS服务器与客户端进行通信,并在必要时提供数据和文件。

基本上我解决了一个问题,遵循Firebase文档:

如果您的Firebase客户端应用程序与自定义后端服务器通信,则可能需要识别该服务器上当前login的用户。 要安全地完成此操作,请在成功login后,使用HTTPS将用户的ID令牌发送到您的服务器。 然后,在服务器上,validationID令牌的完整性和真实性,并从中检索uid。 您可以使用以这种方式传输的uid安全地识别服务器上当前login的用户。

在我的FacebookloginAngular4应用程序:

 loginFb() { this.loading = true; this.afAuth.auth.signInWithPopup(new firebase.auth.FacebookAuthProvider()).then( (user) => { console.log('loginFB'); console.log(user); var token = this.afAuth.auth.currentUser.getToken().then( (token) => console.debug(`******** Token: ${token}`)); <== TOKEN this.af.object(`/users/${user.uid}`).update({ displayName: user.auth.displayName, email: user.auth.email, photoURL: user.auth.photoURL }); this.router.navigate(['/']); }).catch( (err) => { this.loading = false; this.error = err; }); } 

我的NodeJS服务器:

 var admin = require("firebase-admin"); var serviceAccount = require("./server/service-account.json"); admin.initializeApp({ credential: admin.credential.cert(serviceAccount), databaseURL: "https://myapp.firebaseio.com" }); ... //test method router.get("/isAuth/:token", function (req, res) { var token = req.params.token; admin.auth().verifyIdToken(token) .then(function(decodedToken) { var uid = decodedToken.uid; console.log(`Current User ID: ${uid}`); }).catch(function(error) { console.log("Error: " + error); }); }); 

这是如何检查身份validation。