Javascript 正在向firebaseui中的SignInsAccessUrl发送ID令牌
我正在使用firebaseUI将用户登录到我的web应用。我正在使用重定向选项。成功登录后,用户将重定向到SignInsAccessUrl,这是我的web应用程序的管理页面。但是,我希望能够将与用户关联的ID令牌传递到管理端点,在那里可以对其进行身份验证,并检查尝试登录的用户是否具有管理权限(我通过检查数据库中的用户权限来做到这一点) 我考虑了其他几个选项,即:Javascript 正在向firebaseui中的SignInsAccessUrl发送ID令牌,javascript,firebase,firebase-authentication,firebaseui,Javascript,Firebase,Firebase Authentication,Firebaseui,我正在使用firebaseUI将用户登录到我的web应用。我正在使用重定向选项。成功登录后,用户将重定向到SignInsAccessUrl,这是我的web应用程序的管理页面。但是,我希望能够将与用户关联的ID令牌传递到管理端点,在那里可以对其进行身份验证,并检查尝试登录的用户是否具有管理权限(我通过检查数据库中的用户权限来做到这一点) 我考虑了其他几个选项,即: 使用firebase.auth().onAuthStateChanged在管理页面上,检查用户是否已登录,并向后端发出请求以检查用户是
- 它将身份验证的重要部分移动到客户端
- 我不能限制端点级别本身的访问。相反,如果我发送一个ID令牌,我可以检查用户是否是管理员,并相应地决定呈现什么,而不是总是呈现管理员页面,然后在客户端检查用户是否登录并且是管理员
<script type="text/javascript">
initApp = function() {
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
idToken = user.getIdToken();
/*Send idToken to a backend api to check if the corresponding user is an admin*/
/*redirect to https://my-app.com/adminpage/ if user is an admin, otherwise, redirect to https://my-app.com/login/ */
} else {
/*user is signed-off, redirect to https://my-app.com/login */
}
}
</script>
关键是,只有在事先知道用户已登录并且是管理员的情况下,我才想呈现我的管理员主页。
我想知道,当从firebaseUI页面重定向到SigninsAccessUrl时,是否有方法将ID令牌作为基本身份验证头传递,或者发送ID令牌本身的想法是否没有必要,是否有其他更好的流程。我认为您的思路是正确的。我一直在努力寻找一些优雅的东西来做这件事,但我最终还是做了你做的事。理想情况下,我希望
signInsAccessUrl
传递jwt负载,因此,我的后端服务器可以验证其真实性,然后我可以查找用户,然后设置会话或拒绝会话
很多API和文档都是在“Firebase优先”或“仅Firebase”的上下文中编写的,因此您必须开始创造性地与传统REST API集成
我的背景有些相似。我是一个仅限移动的应用程序,使用Firebase auth卸载auth,作为交换,它然后链接到我自己的自定义令牌。最近,我需要创建一些web属性,并希望在传统的客户机/服务器同步REST页面中为我自己的会话管理实现相同的交换
window.initApp = function() {
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
// User is signed in.
user.getIdToken().then(function(accessToken) {
redirectPost("/login", {"access_token": accessToken, "authenticity_token": $("meta[name='csrf-token']").attr('content')})
});
} else {
// User is signed out.
}
}, function(error) {
console.log(error);
});
};
var uiConfig = {
signInSuccessUrl: '/adminpage/',
signInOptions: [
firebase.auth.GoogleAuthProvider.PROVIDER_ID
]
}
window.initApp = function() {
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
// User is signed in.
user.getIdToken().then(function(accessToken) {
redirectPost("/login", {"access_token": accessToken, "authenticity_token": $("meta[name='csrf-token']").attr('content')})
});
} else {
// User is signed out.
}
}, function(error) {
console.log(error);
});
};