首页 > 解决方案 > FirebaseUi-Auth 强制登录

问题描述

我正在尝试为我的网站实施强制登录。我遇到的问题是我找不到这样做的方法。假设我创建了一个登录页面,例如...

  var uiConfig = {
    signInSuccessUrl: '<url-to-redirect-to-on-success>',
    signInOptions: [

      firebase.auth.GoogleAuthProvider.PROVIDER_ID,
      firebase.auth.FacebookAuthProvider.PROVIDER_ID,
      firebase.auth.TwitterAuthProvider.PROVIDER_ID,
      firebase.auth.GithubAuthProvider.PROVIDER_ID,
      firebase.auth.EmailAuthProvider.PROVIDER_ID,
      firebase.auth.PhoneAuthProvider.PROVIDER_ID
    ],

    tosUrl: '<your-tos-url>'
  };


  var ui = new firebaseui.auth.AuthUI(firebase.auth());

  ui.start('#firebaseui-auth-container', uiConfig);
</script>

..在名为 www.example.com/SignIn 的页面上

如果我去 www.example.com/Index

我可以完全绕过所有的登录。

我想像这样的东西

 if ( FirebaseUser.getCurrentUser () != null ) {

重定向到登录页面}

如何 ?

谢谢

标签: javascripthtmlwebfirebase-authenticationfirebaseui

解决方案


在页面上使用onAuthStateChanged监听器www.example.com/Index

firebase.auth().onAuthStateChanged(function(user) {
  if (!user) {
    window.location.assign('www.example.com/SignIn');
  }
  ...
});

但是,这不是实施访问控制的正确方法。您应该通过任一机制强制登录访问:

  1. Firebase 安全规则(您只能让经过身份验证的用户访问某些资源)。
  2. 通过将 ID 令牌传递到您的后端并在返回受限资源之前使用 Firebase Admin SDK对其进行验证。

您也可以使用会话 cookie 来执行此操作,具体取决于您的站点架构。Firebase 现在还提供创建长期会话 cookie的功能


推荐阅读