如何通知用户是否注销或撤消了FirebaseUI Auth中提供者的访问权限?

问题描述 投票:0回答:1

我正在开发一个使用Twitter和电子邮件登录的Android应用。我实现了com.firebaseui:firebase-ui-auth:5.0.0。然后,我正在检查用户是否已经登录,如果没有启动FirebaseUI Auth提供的登录活动:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    firebaseAuth = FirebaseAuth.getInstance();


    List<AuthUI.IdpConfig> providers = Arrays.asList(
            new AuthUI.IdpConfig.EmailBuilder().build(),
            new AuthUI.IdpConfig.TwitterBuilder().build());


    if (firebaseAuth.getCurrentUser() == null) {
        startActivityForResult(
                AuthUI.getInstance()
                        .createSignInIntentBuilder()
                        .setAvailableProviders(providers)
                        .setIsSmartLockEnabled(true)
                        .build(),
                RC_SIGN_IN);
    } else {

        for (UserInfo profile : firebaseAuth.getCurrentUser().getProviderData()) {
            if (profile.getProviderId().equals(TwitterAuthProvider.PROVIDER_ID)) {
                // UID specific to the provider
                String uid = profile.getUid();

                String name = profile.getDisplayName();
                String email = profile.getEmail();
                Uri photoUrl = profile.getPhotoUrl();
            }
        }
        startActivity(new Intent(this,MainActivity.class));
}

通过这种方法,我可以使用我的Twitter帐户登录并声明我的基本Twitter信息,例如姓名,电子邮件,照片URL。但是,当我转到应用程序的原始Twitter android应用程序>设置>帐户>应用程序和会话并撤消访问权限,然后再次尝试打开我的应用程序时,我仍然可以声明我的Twitter信息。我想知道用户何时撤消对我的应用程序的访问权,而无论他们何时这样做,我都希望他们注销。我想知道如何克服这个问题,也想知道这是否是针对这种情况的最佳实践。预先感谢。

android firebase firebase-authentication firebaseui twitter-login
1个回答
0
投票

在Firebase身份验证期间,会生成令牌以确保安全性。将令牌提供给用户后,令牌将一直保持有效,直到过期。如果您撤消了来自Twitter帐户的访问权限,则并不意味着令牌已过期。这仅表示如果用户注销,由于访问被撤消,他将再次能够使用Twitter帐户进行其他身份验证。不幸的是,您无法远程强迫用户退出,因为您也无法以某种方式访问​​用户的设备并删除令牌。需要注销才能在用户登录的设备上进行。因此,即使您从Firebase控制台禁用了该用户的帐户,该用户也可能继续拥有长达一个小时的访问权限。如果这不是您想要的,那么可以使用一种解决方法,在其中可以在Cloud Firestore或Firebase Realtime数据库中添加和维护“已撤销”用户列表,然后使用Firebase Security Rules进行检查。

例如,在实时数据库中,如果用户ID看起来像这样,则吊销列表:

revoked | --- uidOne: true | --- uidTwo: true

然后相应的安全规则可能看起来像这样:

".read": "auth.uid !== null && !root.child('revoked').child(auth.uid).exists()"

© www.soinside.com 2019 - 2024. All rights reserved.