Nodejs Firebase和Angular4身份验证

时间:2017-05-16 02:45:50

标签: node.js angular firebase firebase-realtime-database firebase-authentication

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

  

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

我已经设置了一个fire-admin配置:

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服务器中检查客户端应用中的用户是否已登录?我需要这个NodeJS服务器与客户端通信,并在必要时提供数据和文件。

1 个答案:

答案 0 :(得分:2)

基本上我按照Firebase文档解决了一个问题:

  

如果您的Firebase客户端应用与自定义后端服务器通信,   您可能需要识别当前已登录的用户   服务器。为安全起见,请在成功登录后发送给用户   使用HTTPS向您的服务器添加ID令牌。然后,在服务器上验证   ID令牌的完整性和真实性,并从中检索uid   它。您可以使用以这种方式传输的uid来安全地识别   您服务器上当前登录的用户。

在我的Facebook登录Angular4 App:

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);
  });


});

这是验证身份验证的方式。