如果用户通过Firebase登录,如何显示其他页面

辛德雷姆

我有一个小问题,这似乎很简单,但是我似乎无法全神贯注于该做什么。

我有一个快速应用程序,它使用Firebase来存储数据。我可以通过客户端脚本登录,注册和注销,但是我的问题是:如何通过express检查用户是否登录,以便能够向登录的用户发送不同的页面?

到目前为止,这是我的代码:

var firebase = require('firebase');
// Initialize Firebase
var config = {
 serviceAccount: "./Chat Application-ad4eaaee3fcc.json",
 databaseURL: "MY_DATABASE_URL"
};
firebase.initializeApp(config);

然后我想为登录的用户显示一个特殊页面,这是我尝试过的:

router.get("/special-page", function(req, res, next) {
    var user = firebase.auth().currentUser;
    console.log(user); // this variable gets undefined
    if(user) {
        res.render("special-page");
    } else {
        res.redirect("/");
  }
});

我知道这似乎是一个简单的问题,但是任何帮助将不胜感激!

提前致谢。

潘代奥洛

用户端和服务器端是完全不同的执行区域。因此,您可能已经猜到了,firebase.auth().currentUser如果客户端上进行了身份验证,则无法在服务器上进行调用

除非客户端告诉他,否则服务器进程只是没有此信息。

您可能只有一个请求标头,告诉我“我被记录为XXX”,但这并不安全,因为服务器将无法验证该信息,并且恶意用户可能会伪装成另一个用户。

在您的用例中,对此的唯一解决方案是向服务器提供Firebase令牌,然后服务器需要针对Firebase服务器验证此令牌,只有这样,它才能100%确定客户端身份验证。

我需要在我的React应用程序中进行服务器端渲染,这是我的方法。

  • 通过用户身份验证后,设置一个包含Firebase令牌的Cookie
  • 用户注销时取消设置Cookie
  • 在服务器中,读取cookie以在每次请求时对客户端用户进行身份验证

客户端代码:

const setAppCookie = () => firebase.auth().currentUser &&
    firebase.auth().currentUser.getToken().then(token => {
        cookies.set('token', token, {
            domain: window.location.hostname,
            expire: 1 / 24, // One hour
            path: '/',
            secure: true // If served over HTTPS
        });
    });

const unsetAppCookie = () => 
    cookies.remove('token', {
        domain: window.location.hostname,
        path: '/',
    });

// triggered by firebase auth changes, this is where you deal
// with your users authentication in your app
fbAuth.onAuthStateChanged(user => {
    if (!user) {
        // user is logged out
        return;
    } 
    // user is logged in
    setAppCookie();
    // Reset cookie before hour expires 
    // (firebase tokens are short lived, say the docs)
    setInterval(setAppCookie, 3500);
});

[...]

// In the logout code
unsetAppCookie();

服务器中的代码:

// Before serving express app, enable cookie parsing
app.use(cookieParser());

// In the code dealing with your requests
const { token } = req.cookies;

if (!token) {
    // renderWithoutUser();
}

//
// If user found in cookie, verify the token and render with logged in store
//
console.log('Verifying token', token);
firebase.auth().verifyIdToken(token)
    .then(decodedToken => {
        const uid = decodedToken.sub;
        console.log('User is authenticated for this request', uid);
        // renderWithUser();
    })
    .catch(err => {
        console.error('WARNING token invalid or user not found', err);
        // renderWithoutUser();
    });

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如果用户尝试通过URL访问其他站点页面,如何在C#MVC 4.5中重定向未登录到登录页面的用户

来自分类Dev

SecureSocial-如果用户已登录,则显示其他主页

来自分类Dev

如何在Firebase Auth中阻止用户未经登录权限访问其他页面

来自分类Dev

如何在Firebase Auth中阻止用户未经登录权限访问其他页面

来自分类Dev

如何检查用户是否已登录,如果显示其他屏幕?

来自分类Dev

如果用户在django中注册后首次登录,如何将用户重定向到其他页面?

来自分类Dev

如何隐藏其他用户的“私人”显示页面?

来自分类Dev

如果还有其他用户通过ssh登录,则禁用shutdown / suspend

来自分类Dev

与登录到其他页面相比,如何检测用户名和密码

来自分类Dev

登录后如何将用户导航到其他页面?

来自分类Dev

如果已发送该表单(在通过iFrame显示的其他网站上),请允许用户继续

来自分类Dev

登录后将用户重定向到其他页面

来自分类Dev

mediawiki如何在其他私有Wiki的登录页面上显示信息

来自分类Dev

如果出现重复输入错误,如何将用户重定向到其他页面?

来自分类Dev

如何将用户uid从登录页面传递到Web应用程序中的其他页面

来自分类Dev

在通过Facebook登录的解析用户中保存其他字段

来自分类Dev

如果已经使用angularjs登录,如何避免显示登录页面?

来自分类Dev

以其他用户身份登录Firebase

来自分类Dev

以其他用户身份登录Firebase

来自分类Dev

用户在个人资料页面(重定向到个人资料页面)中已通过身份验证,但未登录其他页面

来自分类Dev

如何不以角度显示登录用户的登录页面

来自分类Dev

如果用户选择其他背景,如何使背景图片永久显示

来自分类Dev

如果其他用户ping该用户discord.py,则如何使漫游器显示用户的信息

来自分类Dev

如何使用UserManager通过ID,名称,电子邮件或其他搜索条件获取用户(不是当前登录的用户)?

来自分类Dev

在其他页面显示用户名?代码错误

来自分类Dev

如果用户已经在其他窗口中使用instagram登录,则如何使用instagram处理身份验证

来自分类Dev

如果我要使用的用户名未在登录屏幕上列出,如何在ubuntu 12.04中启用“其他用户”登录?

来自分类Dev

如果用户使用AngularFire登录,如何防止访问Angular页面?

来自分类Dev

如果用户未登录 Wordpress 如何隐藏页面

Related 相关文章

  1. 1

    如果用户尝试通过URL访问其他站点页面,如何在C#MVC 4.5中重定向未登录到登录页面的用户

  2. 2

    SecureSocial-如果用户已登录,则显示其他主页

  3. 3

    如何在Firebase Auth中阻止用户未经登录权限访问其他页面

  4. 4

    如何在Firebase Auth中阻止用户未经登录权限访问其他页面

  5. 5

    如何检查用户是否已登录,如果显示其他屏幕?

  6. 6

    如果用户在django中注册后首次登录,如何将用户重定向到其他页面?

  7. 7

    如何隐藏其他用户的“私人”显示页面?

  8. 8

    如果还有其他用户通过ssh登录,则禁用shutdown / suspend

  9. 9

    与登录到其他页面相比,如何检测用户名和密码

  10. 10

    登录后如何将用户导航到其他页面?

  11. 11

    如果已发送该表单(在通过iFrame显示的其他网站上),请允许用户继续

  12. 12

    登录后将用户重定向到其他页面

  13. 13

    mediawiki如何在其他私有Wiki的登录页面上显示信息

  14. 14

    如果出现重复输入错误,如何将用户重定向到其他页面?

  15. 15

    如何将用户uid从登录页面传递到Web应用程序中的其他页面

  16. 16

    在通过Facebook登录的解析用户中保存其他字段

  17. 17

    如果已经使用angularjs登录,如何避免显示登录页面?

  18. 18

    以其他用户身份登录Firebase

  19. 19

    以其他用户身份登录Firebase

  20. 20

    用户在个人资料页面(重定向到个人资料页面)中已通过身份验证,但未登录其他页面

  21. 21

    如何不以角度显示登录用户的登录页面

  22. 22

    如果用户选择其他背景,如何使背景图片永久显示

  23. 23

    如果其他用户ping该用户discord.py,则如何使漫游器显示用户的信息

  24. 24

    如何使用UserManager通过ID,名称,电子邮件或其他搜索条件获取用户(不是当前登录的用户)?

  25. 25

    在其他页面显示用户名?代码错误

  26. 26

    如果用户已经在其他窗口中使用instagram登录,则如何使用instagram处理身份验证

  27. 27

    如果我要使用的用户名未在登录屏幕上列出,如何在ubuntu 12.04中启用“其他用户”登录?

  28. 28

    如果用户使用AngularFire登录,如何防止访问Angular页面?

  29. 29

    如果用户未登录 Wordpress 如何隐藏页面

热门标签

归档