Как узнать, если пользователь вышел из системы или отменил доступ у провайдера в FirebaseUI Auth? - PullRequest
0 голосов
/ 17 января 2020

Я разрабатываю приложение android, которое имеет логин через Twitter и электронную почту. Я реализовал 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 и запросить мой базовый c twitter. информация, как имя, адрес электронной почты, фото URL. Но когда я go перешел к исходному приложению Twitter android> Настройки> Учетная запись> Приложения и сеансы и отменил доступ к своему приложению, а затем снова попытался открыть свое приложение, я все равно могу запросить информацию из своего Twitter , Я хочу знать, когда пользователь аннулировал доступ к моему приложению, и всякий раз, когда он это делает, я хочу, чтобы он выходил из системы. Интересно, как я могу преодолеть эту проблему, и мне также интересно, является ли это наилучшей практикой для этой ситуации. Заранее спасибо.

1 Ответ

1 голос
/ 17 января 2020

Во время аутентификации Firebase для безопасности генерируется токен. Как только токен предоставляется пользователю, он остается в силе до истечения срока его действия. Если вы аннулируете доступ из своей учетной записи Twitter, это не означает, что срок действия токена истек. Это просто означает, что если пользователь выйдет из системы, он не сможет снова использовать учетную запись Twitter для другой аутентификации, поскольку доступ был аннулирован. К сожалению, вы не можете удаленно заставить пользователя выйти из системы, так как невозможно получить доступ к устройству пользователя и удалить токен. Любой выход необходим для выполнения на устройстве, на котором зарегистрирован пользователь.

Таким образом, даже если вы отключите учетную запись пользователя из консоли Firebase, пользователь может продолжать иметь доступ в течение часа. Если это не то, что вам нужно, есть обходной путь, в котором вы можете добавить и поддерживать в Cloud Firestore или в базе данных Firebase Realtime список «отозванных» пользователей, а затем проверить это с помощью Firebase Security Rules .

Например, в базе данных реального времени отозванный список, если идентификаторы пользователей могут выглядеть так:

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

И тогда соответствующее правило безопасности может выглядеть так:

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