检查用户是否通过Express.js和Firestore登录



我试图确定用户是否通过Express.js和Firestore登录。这个想法是有登录/创建用户表单显示在url路径,'/'。但是,如果用户登录了,那么应用程序会将用户重定向到用户的仪表板页面。这将在用户登录或创建帐户时发生。

当我运行我的代码时,我得到错误

TypeError: admin.auth(...).onAuthStateChanged is not a function

我已经意识到,管理包没有onAuthStateChanged,因为这是只存在于客户端的东西。然而,我想知道我将如何实现加载不同的视图取决于用户是否从服务器端登录?它甚至对我来说是好的,通过服务器端做这个,或者有一个更好的方式让我接近这个?

const admin = require('firebase-admin')
...
app.get('/', (req, res) => {
admin.auth().onAuthStateChanged(function(user) {
// render user dashboard if user is logged in 
if (user) {
getRestaurant('KOBmyfQEu4urNGgBTuiJ').then(data => {
let ambassadorPromise = getAmbassadorInfo('KOBmyfQEu4urNGgBTuiJ')
let activityPromise = getActivityFeed('KOBmyfQEu4urNGgBTuiJ')

var restaurantName = data['name']
var totalScans = data['total_scans']

Promise.all([ambassadorPromise, activityPromise]).then(values => {
...

res.render('dashboard', {restaurantName, totalScans, ambassadorList, activityList})
})
})
} 
// render account creation/login page is user is not logged in
else {
res.render('auth')
}
});
})

onAuthStateChanged是Firebase Client SDK中的一个函数。通常你会使用客户端SDK获得ID令牌,然后在你的API请求中传递它,但这里似乎你需要在页面呈现之前对用户进行身份验证。在这种情况下,您应该使用会话cookie。用户登录后,向服务器发出API请求,使用createSessionCookie()方法生成cookie并进行设置。然后,您可以在呈现页面之前验证cookie。

您可以在文档中找到实现此功能的大部分代码和详细信息。

最新更新