【问题标题】:Getting Custom tokens from Android App in Firebase Auth在 Firebase Auth 中从 Android 应用获取自定义令牌
【发布时间】:2020-10-08 19:53:04
【问题描述】:

我正在开发一个需要 firebase 自定义令牌的应用程序。 我可以通过 node.js 服务器中的可调用云函数分配自定义声明。现在我需要在我的应用程序中使用它们来控制访问。我怎样才能实现它?

FirebaseAuth.getInstance().getCurrentUser().getTokens()

这样

我尝试从 firestore 获取令牌,但它需要读取操作。

【问题讨论】:

    标签: java android firebase firebase-authentication


    【解决方案1】:

    在 Auth 用户上使用 getIdToken() 以获取声明。

    看看下面的例子:

    user.getIdToken(false).addOnSuccessListener(new OnSuccessListener<GetTokenResult>() {
      @Override
      public void onSuccess(GetTokenResult result) {
        boolean isAdmin = result.getClaims().get("admin");
        if (isAdmin) {
          // Show admin UI.
          showAdminUI();
        } else {
          // Show regular user UI.
          showRegularUI();
        }
      }
    });
    

    另外请记住,在更新之前需要刷新 ID 令牌,您可以按照以下方式进行操作,

    currentUser.getIdToken(true)

    自定义声明仅用于验证角色和存储非常小的数据。它不应该用来保存用户的信息。

    来源和进一步阅读:https://firebase.google.com/docs/auth/admin/custom-claims#propagate_custom_claims_to_the_client

    【讨论】:

      【解决方案2】:

      currentUser 具有带有回调参数 addOnSuccessListener 的 getIdToken 方法。 addOnSuccessListener 提供对 GetTokenResult(map) 的访问权限,使用它来检查您的声明。

      private fun login() {
              val user = FirebaseAuth.getInstance().currentUser
              if (user == null) showAuthActivity()
              user?.getIdToken(true) // forceRefresh: boolean Force refresh regardless of token expiration.
                  ?.addOnSuccessListener {it: GetTokenResult ->
                      val role = (it.claims["admin"] as? Boolean)
                          ?: (it.claims["clientUser"] as? Boolean) ?: false
                      if (role) {
                          startActivity(Intent(this, MainActivity::class.java))
                          finish()
                      } else {
                          showAuthActivity()
                          showToast("You don't have permissions to use this app")
                      }
                  }
                  ?.addOnFailureListener {
                      showAuthActivity()
                      showToast("Something went wrong e = ${it.message}")
                  }?.addOnCanceledListener {
                      showAuthActivity()
                  }
          }
      

      【讨论】:

        猜你喜欢
        • 2021-10-22
        • 2016-09-27
        • 1970-01-01
        • 1970-01-01
        • 2018-01-07
        • 1970-01-01
        • 2018-05-22
        • 1970-01-01
        • 2017-01-01
        相关资源
        最近更新 更多