基于客户端Firebase身份验证的令牌的服务器端Node.js / Express授权

时间:2019-02-25 20:56:26

标签: node.js express firebase-authentication ejs serverside-rendering

我正在尝试对我的项目进行简单的身份验证。 客户端Firebase身份验证(google)可以完美运行,但是如何限制服务器端用户访问某些路由?

我通过简单的http请求将身份验证令牌传递到服务器端没有问题:

firebase.auth().currentUser.getIdToken(true)
.then((idToken) => {
            // Send token to your backend via HTTPS
            $.ajax({
                type: 'POST',
                beforeSend: function (xhr) {
                    xhr.setRequestHeader('Authorization', idToken);
                },
                url: '/token'
            });
          });

但是问题在于,这只是一种api调用,不会重定向到任何地方。我不能只是从客户端转到其他任何路径,而是将令牌与打开新链接一起传递。 (或者我可以吗?)

在服务器端,我很容易在“ / token”路径上捕获令牌:

app.post('/token', (req, res) => {  
      idToken = res.req.headers.authorization;
      res.status(200).send('OK');

      admin.auth().verifyIdToken(idToken)
      .then((user) => {
        console.log(user.email);
        console.log(user.uid);
        console.log(user.name);
      });
    });

但是在服务器端,我无法将令牌与任何其他页面的调用相匹配。我该怎么办,所以我可以添加一些检查以根据用户数据呈现页面。还是不全力以赴。像这样:

 app.get("/dashboard", function (req, res) {
     if (user.isAlowedToAccessDashboard) {
       var userSpecificData = user.someData;
       res.render(activeMenu, {userSpecificData});
     } else {
       console.log('Access denied');
     }
 });

很高兴继续使用Express / EJS / FirebaseAuth,但我会感激任何的构想,建议或体系结构更改。谢谢!

0 个答案:

没有答案