Блокировка просмотра Android до аутентификации через firebase - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь добавить аутентификацию в мое приложение для Android, используя Firebase.Я использую метод входа в Google.Я создал специальное действие, которое должно быть расширено любым представлением, требующим аутентификации пользователя:

public class AuthenticatedActivity extends AppCompatActivity {
    private final static String TAG = "AuthenticatedActivity";
    private static final int RC_SIGN_IN = 123;
    protected FirebaseUser firebaseUser;
    private FirebaseAuth auth;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        auth = FirebaseAuth.getInstance();
        firebaseUser = auth.getCurrentUser();
        if (firebaseUser == null) {
            GoogleSignInOptions options = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                    .requestIdToken(BuildConfig.WEB_CLIENT_ID)
                    .requestEmail()
                    .build();
            // Build a GoogleSignInClient with the options specified by gso.
            GoogleSignInClient client = GoogleSignIn.getClient(this, options);
            startActivityForResult(client.getSignInIntent(), RC_SIGN_IN);
        }
    }

    public void onDestroy() {
        super.onDestroy();
        FirebaseAuth.getInstance().signOut();
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == RC_SIGN_IN) {
            Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
            try {
                GoogleSignInAccount account = task.getResult(ApiException.class);
                firebaseAuthWithGoogle(account);
            } catch (ApiException e) {
                Log.w(TAG, "Google sign in failed", e);
                // TODO: Handle error
            }
        }
    }

    private void firebaseAuthWithGoogle(GoogleSignInAccount account) {
        Log.d(TAG, "firebaseAuthWithGoogle:" + account.getId());

        AuthCredential credential = GoogleAuthProvider.getCredential(account.getIdToken(), null);
        final AuthenticatedActivity activity = this;
        auth.signInWithCredential(credential)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {
                            Log.d(TAG, "signInWithCredential:success");
                            activity.firebaseUser = auth.getCurrentUser();
                        } else {
                            Log.w(TAG, "signInWithCredential:failure", task.getException());
                            // TODO: Handle error.
                        }
                    }
                });
    }
}

Когда я расширяю это действие (т.е. создаю подкласс), меня действительно просят войти в систему., но я могу легко проигнорировать это, нажав кнопку «назад».Также контент загружается до того, как пользователь вошел в систему.

Как мне аутентифицировать пользователей в представлениях, чтобы убедиться, что ничего не загружено, пока пользователь не вошел в систему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...