我正在尝试对我的项目进行简单的身份验证。 客户端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,但我会感激任何的构想,建议或体系结构更改。谢谢!