2016-08-23 18 views
6

Postanowiłem użyć Volley i przejść do RESTful trasy z Firebase, ponieważ ich słuchacze wydają się zawiesić, gdy nie ma połączenia z Internetem. Przynajmniej z Volley, to pozwala mi wiedzieć, czy żądanie sieci nie powiodło się z powodu połączenia z Internetem, czy nie.Android - Czy znaczniki uwierzytelniania użytkownika Firebase wygasają?

Muszę wiedzieć, czy tokeny autoryzacji FirebaseUser wygasną, czy nie. W mojej aplikacji, ja tylko pozwalają uwierzytelniania Google i Facebook, a ja użyć następującego kodu przy założeniu, że użytkownik Firebase auth żeton nie wygasają:

private String authToken; 

// Callbacks 

public interface ApiCallbacks { 
    public void onSuccess(JSONObject response); 
    public void onError(String errorString); 
} 

private interface AuthTokenCallbacks { 
    public void onAuthTokenSuccess(); 
    public void onAuthTokenError(String errorString); 
} 

// Request Helpers 

private void getAuthToken(final AuthTokenCallbacks callbacks) { 
    // Lazy instantiation 
    if (authToken == null) { 
     FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 
     if (user == null) { 
      callbacks.onAuthTokenError("Please log in"); 
     } else { 
      user.getToken(false).addOnCompleteListener(new OnCompleteListener<GetTokenResult>() { 
       @Override 
       public void onComplete(@NonNull Task<GetTokenResult> task) { 
        if (task.isSuccessful()) { 
         authToken = task.getResult().getToken(); 
         callbacks.onAuthTokenSuccess(); 
        } else { 
         callbacks.onAuthTokenError("Please log in"); 
        } 
       } 
      }); 
     } 
    } else { 
     callbacks.onAuthTokenSuccess(); 
    } 
} 

public void sendGetRequestTo(final String endpoint, final HashMap<String, String> arguments, final RequestQueue requestQueue, final String tag, final ApiCallbacks callbacks) { 
    // Only execute get request if we have an auth token 
    getAuthToken(new AuthTokenCallbacks() { 
     @Override 
     public void onAuthTokenSuccess() { 
      final String requestUrl = getRequestUrlString(endpoint, arguments); 
      JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, requestUrl, null, new Response.Listener<JSONObject>() { 
       @Override 
       public void onResponse(JSONObject response) { 
        callbacks.onSuccess(response); 
       } 
      }, new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        callbacks.onError(error.toString()); 
       } 
      }); 
      request.setTag(tag); 
      requestQueue.add(request); 
     } 

     @Override 
     public void onAuthTokenError(String errorString) { 
      callbacks.onError("Please log in"); 
     } 
    }); 
} 

Czy to jest poprawny sposób to zrobić? Muszę tylko wiedzieć, czy zmierzam we właściwym kierunku, ponieważ nie chcę przyszłych problemów z wygasającymi tokenami auth (jeśli tak).

EDIT

Zapomniałam wspomnieć, że moja metoda final String requestUrl = getRequestUrlString(endpoint, arguments); zasadzie konstruuje żądania ciąg url auth=authTokenString dołączany na końcu mojego adresu URL.

Odpowiedz

6

Tak, wygasają (można sprawdzić datę wygaśnięcia na jwt.io). Jeśli nie wymusisz odświeżenia (tj. user.getToken(false)), zwrócony token zostanie zaktualizowany tylko wtedy, gdy wygasł. Po przejściu true do getToken(...) zostanie utworzony nowy token, który obejmuje także weryfikację tokenów powiązanych dostawców na serwerach bazy ogniowej (na przykład sprawdzanie na Facebooku, czy użytkownik nadal ma połączone konto). Pamiętaj, że te ostatnie wliczają się do dziennych limitów usług tokenów, więc upewnij się, że używasz go tylko wtedy, gdy jest to konieczne.

Powiązane problemy