【问题标题】:Nodejs Firebase and Angular4 AuthenticationNodejs Firebase 和 Angular4 身份验证
【发布时间】:2017-10-14 23:01:33
【问题描述】:

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

Firebase 客户端 (Angular4) NodeJs(firebase-admin) Firebase

我已经设置了一个 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 服务器与客户端通信并在必要时提供数据和文件。

【问题讨论】:

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


    【解决方案1】:

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

    如果您的 Firebase 客户端应用与自定义后端服务器通信, 您可能需要识别当前登录的用户 服务器。为了安全地执行此操作,在成功登录后,将用户的 使用 HTTPS 到您的服务器的 ID 令牌。然后,在服务器上,验证 ID 令牌的完整性和真实性,并从中检索 uid 它。您可以使用这种方式传输的uid来安全识别 您服务器上当前登录的用户。

    在我的 Angular4 应用程序中的 Facebook 登录:

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

    这是可以检查身份验证的方式。

    【讨论】:

      猜你喜欢
      • 2019-06-22
      • 2018-10-26
      • 1970-01-01
      • 2017-09-12
      • 2014-02-12
      • 1970-01-01
      • 2022-01-20
      • 2018-04-15
      • 1970-01-01
      相关资源
      最近更新 更多