Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正在向firebaseui中的SignInsAccessUrl发送ID令牌_Javascript_Firebase_Firebase Authentication_Firebaseui - Fatal编程技术网

Javascript 正在向firebaseui中的SignInsAccessUrl发送ID令牌

Javascript 正在向firebaseui中的SignInsAccessUrl发送ID令牌,javascript,firebase,firebase-authentication,firebaseui,Javascript,Firebase,Firebase Authentication,Firebaseui,我正在使用firebaseUI将用户登录到我的web应用。我正在使用重定向选项。成功登录后,用户将重定向到SignInsAccessUrl,这是我的web应用程序的管理页面。但是,我希望能够将与用户关联的ID令牌传递到管理端点,在那里可以对其进行身份验证,并检查尝试登录的用户是否具有管理权限(我通过检查数据库中的用户权限来做到这一点) 我考虑了其他几个选项,即: 使用firebase.auth().onAuthStateChanged在管理页面上,检查用户是否已登录,并向后端发出请求以检查用户是

我正在使用firebaseUI将用户登录到我的web应用。我正在使用重定向选项。成功登录后,用户将重定向到SignInsAccessUrl,这是我的web应用程序的管理页面。但是,我希望能够将与用户关联的ID令牌传递到管理端点,在那里可以对其进行身份验证,并检查尝试登录的用户是否具有管理权限(我通过检查数据库中的用户权限来做到这一点)

我考虑了其他几个选项,即:

  • 使用firebase.auth().onAuthStateChanged在管理页面上,检查用户是否已登录,并向后端发出请求以检查用户是否为管理员。如果满足这些条件,则呈现页面,否则,显示权限被拒绝。 这种方法的问题在于:

    • 它将身份验证的重要部分移动到客户端
    • 我不能限制端点级别本身的访问。相反,如果我发送一个ID令牌,我可以检查用户是否是管理员,并相应地决定呈现什么,而不是总是呈现管理员页面,然后在客户端检查用户是否登录并且是管理员
  • 在firebase登录页面和管理员主页之间创建虚拟页面。此虚拟页面将检查用户是否使用上面提到的onAuthStateChanged登录,向后端发出请求以检查用户是否具有管理员权限,并根据结果重定向到管理员主页或显示权限被拒绝并返回登录页面。 如果我这样做,配置将是这样的:

  • /admintestpage/endpoint将呈现test.html,其代码如下:

    <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);
      });
    };