如何检查用户是不是在 Firebase 和 Express/Node.js 中经过身份验证?

Posted

技术标签:

【中文标题】如何检查用户是不是在 Firebase 和 Express/Node.js 中经过身份验证?【英文标题】:How to check if user is authenticated in Firebase and Express/Node.js?如何检查用户是否在 Firebase 和 Express/Node.js 中经过身份验证? 【发布时间】:2018-11-11 14:47:05 【问题描述】:

如果我有一个页面只能由经过身份验证的用户访问,我如何检查用户是否经过身份验证?

我尝试使用(firebase.auth().currentUser !== null),但我收到一条错误消息:TypeError: firebase.auth is not a function

我有以下配置:

const express = require('express'),
      firebase = require('firebase'),
      app = express();

app.use(express.static("/public"));

var config = 
   apiKey: "xxxx",
   authDomain: "xxxx",
   databaseURL: "xxxx",
   projectId: "xxxx",
   storageBucket: "xxxx",
   messagingSenderId: "xxxx"
;

firebase.initializeApp(config); 

app.get("/dashboard", (request, response) => 
   if (firebase.auth().currentUser !== null)
       response.render("dashboard.ejs")
   
   else
       response.render("login.ejs");
   
);

【问题讨论】:

firebase.auth is not a function的可能重复 我以前见过这个,在那里尝试了解决方案,但没有运气。我的问题可能是什么情况,是调用 firebase.auth().currentUser 更好还是有更好的方法通过管理 SDK 访问它? 【参考方案1】:

您的代码位于 Express 应用程序中,这意味着它在服务器上运行。您使用的 Firebase SDK 适用于客户端设备,无法在您的 Express 环境中正常运行。服务器上没有“当前用户”的概念。当然,每个请求都可以将用户 ID 传递给服务器,但服务器本身是无状态的。

在您的 Express 服务器中,您需要使用 Firebase Admin SDK。看看这个Cloud Functions sample on how to build an authenticated endpoint。

【讨论】:

噗,想象一下我在登录页面。我在正文中发送带有用户名和密码的 POST 请求。现在,由于我无法在我的app.post("/login") express 应用中使用通常的firebase.auth().signInWithEmailAndPassword(email, password) 登录,那我应该如何登录? 不要发送带有用户名和密码的帖子请求。发送 ID 令牌并验证 ,如示例所示或此处:firebase.google.com/docs/auth/admin/verify-id-tokens 弗兰克,我正在按照你的建议做。按照您建议的指导方针,当我使用idToken/login 发送帖子并像这样设置标题:response.header("Authorization" , "Bearer " + idToken); 时,它不起作用。经过 SO 之后,似乎在重定向之前设置标头不起作用。那你有什么建议吗? 检查您是否与我在答案中链接的示例或此示例中的示例相同:github.com/firebase/functions-samples/tree/master/…。如果您认为自己是,但它不起作用,请使用minimal, complete code that reproduces the problem 提出一个新问题。 弗兰克,请看一下并帮助我:***.com/questions/50900309/…?

以上是关于如何检查用户是不是在 Firebase 和 Express/Node.js 中经过身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查用户是不是刚刚在 Firebase 中首次登录 Google

如何检查用户是不是在客户端使用 Firebase 登录? [关闭]

当用户在flutter中使用otp方法登录时,如何检查用户详细信息是不是已经存在于firebase中? [复制]

如何在 Firebase Auth 中检查用户是不是通过 Facebook 登录 [重复]

如何检查用户是不是已使用 Google Sign in 和 Firebase Auth 登录以检索他们的数据?

如何使用geofire查询检查10公里半径内是不是存在firebase用户