4 votes

le jeton d'accès firebase expire dans 4 à 5 heures

Je suis en train de créer une application de chat et j'utilise l'autorisation de téléphone de Firebase et l'api de chat de Quickblox.

Mon code est :

private void signInWithPhoneAuthCredential(PhoneAuthCredential credential) {
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {

                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d("test", "signInWithCredential:success");
                        FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser();

                        mUser.getToken(false).addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
                            @Override
                            public void onComplete(@NonNull Task<GetTokenResult> task) {
                                if(task.isSuccessful()){
                                    String m=task.getResult().getToken();
                                    signIn(m);
                                }
                            }
                        });

 public void signIn(String token){
       QBUsers.signInUsingFirebase(projectId, token).performAsync( new QBEntityCallback<QBUser>() {
        @Override
        public void onSuccess(QBUser user, Bundle args) {

            messenger.com.nowchat.helper.DataHolder.getInstance().setSignInQbUser(user);
            Intent intent = new Intent(Registration.this, WelcomeProfile.class);
            startActivity(intent);
             finish();
        }
}

Mais le problème est que mon jeton expire après 4 à 5 heures. Lorsque je vide le cache ou que je réinstalle l'application, elle fonctionne à nouveau pendant 5 heures.

3voto

Vous pouvez utiliser QBSessionListener pour écouter les états de QBSession. Ainsi, dans le callback onProviderSessionExpired(String provider) vous pouvez obtenir le jeton firebase actuel et renouveler la QBSession. Dans le code, cela ressemblera à ceci :

@Override
public void onProviderSessionExpired(String provider) {
    if (!QBProvider.FIREBASE_PHONE.equals(provider)){
        return;
    }

    final String projectId = "your.project.id";

    FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser();
        mUser.getToken(true)
                .addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
                    public void onComplete(@NonNull Task<GetTokenResult> task) {
                        if (task.isSuccessful()) {
                            String authToken = task.getResult().getToken();
                            QBUsers.signInUsingFirebase(projectId, authToken).performAsync(new QBEntityCallback<QBUser>() {
                                @Override
                                public void onSuccess(QBUser qbUser, Bundle bundle) {
                                    qbUser.setPassword(QBSessionManager.getInstance().getToken());
                                    QBChatService.getInstance().login(qbUser, new QBEntityCallback() {
                                        @Override
                                        public void onSuccess(Object o, Bundle bundle) {
                                            //your actions after success login to the chat
                                        }

                                        @Override
                                        public void onError(QBResponseException e) {

                                        }
                                    });
                                }

                                @Override
                                public void onError(QBResponseException e) {

                                }
                            });
                        } else {
                            // Handle error -> task.getException();
                        }
                    }
                });
}

1voto

Igor Khomenko Points 7233

C'est normal qu'il expire

D'après ce que j'ai compris, le onVerificationCompleted se déclenchera dans deux situations :

  1. Première connexion (par SMS de confirmation)
  2. Renouvellement du jeton

https://firebase.google.com/docs/auth/Android/phone-auth#verification-callbacks

Vous devez donc l'écouter tout le temps et s'il est renouvelé - alors appelez QuickBlox login à nouveau.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X