0

我喜欢火力点,它提供了应用程序开发什么访问某个页面,还在学习吧..如何只允许经过身份验证的用户通过后台

所以我想知道我怎么可能让某些网页被唯一通过云功能访问认证用户?

我知道我可以在客户端是通过把这段代码很容易就在你的主脚本

firebase.auth().onAuthStateChanged(function(user) { 
    if (user) { 
    //do something 
    } else { 
    // redirect to login page 
    } 
}); 

它工作正常,但对于在后端的顶部做呢?

我已经试过这种方式 - index.js的云功能。

const functions = require('firebase-functions'); 
const firebase = require('firebase'); 

    const config = { 
    // needed configs here 

    }; 
    firebase.initializeApp(config); 

exports.api = functions.https.onRequest((req, res) => { 

firebase.auth().onAuthStateChanged(function(user) { 
    if (user) { 
    res.status(200).send("logged in") 
    } else { 
    res.status(200).send("not logged in") 
    } 
}); 

}); 

所以我可以这样来配置

{ 
    "database": { 
    "rules": "database.rules.json" 
    }, 
    "hosting": { 
    "public": "public", 
    "rewrites": [ { 
     "source": "/getstarted", "function": "api" 
    } ] 
    } 
} 

重写规则当我访问/ getstarted页面,它会检查是否验证,如果不只是给未经授权的文/重定向到他们/登录页面

因此,在我登录前端后,我尝试访问/ getstarted页面,它仍然显示没有登录

我必须做错了什么。 。

+0

[此](https://github.com/firebase/functions-samples/tree/master/authorized-https-endpoint)和[这](https://github.com/firebase/functions-samples/tree/master/authenticated-json-api)示例显示了一种方式,但这些代码看起来很恐怖,我不知道如何实现什么我想 – user7716943

+0

这两个例子都是通过POST验证用户请求http功能的。您正试图使用​​GET保护http文件。如下所述,这需要成为前端问题,而不是使用Firebase云代码时的后端问题。 Express +节点通过模板生成您的页面,Firebase云代码不应该这样做。这是您的前端使用的服务。 – David

回答

0

Firebase云代码在远程服务器上运行,而不是在客户端Web浏览器上运行。云代码中的firebase变量默认具有管理员权限,但不会以与请求该云代码的客户端相同的用户身份登录。

另外,onAuthStateChanged是一个异步函数,实际上在页面加载时会经常返回一个空值,并且一旦页面实现了用户登录就会返回实际用户。由于其异步特性,它是不适合单一时间(同步)检查用户是否登录。

相反,您在客户端使用异步操作的第一个示例是一个很好的解决方案。它可能会导致只有用户“闪烁”给您的客户,但可以通过多种方式消除。一个示例将是最初显示加载屏幕,然后进行编码

firebase.auth().onAuthStateChanged(function(user) { 
    if (user) { 
    // remove div containing loading screen 
    } else { 
    // redirect to login page 
    } 
}); 
+0

我看到了,但是当我运行我自己的nodejs时,我甚至可以重定向 – user7716943

+0

这是不同的dev设置。你使用的是什么类型的前端框架?许多现代SPA框架都具有路由的先决条件,并且您可以检查用户是否对某些路由进行身份验证。 – David

+0

我的意思是我可以用我在本地主机上运行的nodejs服务器来做我想做的事情,如果firebase云功能也是通过nodejs运行的,那么在localhost服务器上运行自己的nodejs时,我们似乎做不到我们所能做的。我正在考虑使用AngularJs作为前端框架。 – user7716943

相关问题