6

Cognito ile deneme yapıyorum ve bunun iyi olmaya başladığını düşündüğümde, (Google) jetonunun 1 saat sonra sona ermesiyle karşı karşıya kalıyorum.AWS Cognito: belirteç son kullanma süresiyle başa çıkmak

Temiz bir aygıtla başladığımda, kaydolabilir, uygulamayı 1 saat kullanabilirim, ardından veri kümesini yenilemeye gerek kalmaz, belirtecin alındığını ve hata belirtildiğini söyleyerek hata alıyorum.

Bununla nasıl baş edileceğine dair bir örnek var mı?

Gerçekten de uygulama geliştiricilerinin yapması gereken bir şey mi? SDK'nın arka planda böyle şeyleri yönetmesini bekliyordum.

Bu, her veri kümesi eşitlemesinden önce credentialsProvider.getSessionCredentitalsExpiration() yöntemini kontrol etmemiz gerektiği anlamına mı geliyor?

Çok teşekkürler, JM

Düzenleme 1: Eklenen kod

sadece ilk defa bir kere teoride, bir SigninActivity var, ama hiçbir kimlik hiç var iken sadece denir kullanıcı oturum açar.

Aşağıdaki şekilde oluşturulur (yararsız bitler kaldırılır). Öyleyse, doğru olanı ilk defa doğruladığımı, ancak bu etkinliğe bir daha asla girmediğimde belki de bir şey eksik olabilir.

Ancak bu belirteci sessizce yenilemenin bir yolu olmalı?

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    this.setContentView(R.layout.signin); 

    // Aws Credential provider 
    credentialsProvider = new CognitoCachingCredentialsProvider(
      getApplicationContext(), // Context 
      getString(R.string.aws_identity_pool), // Identity Pool ID 
      Regions.EU_WEST_1 // Region 
    ); 

    // Google connect 
    findViewById(R.id.signin_with_google_btn).setOnClickListener(this); 

    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
      .requestEmail() 
      .requestProfile() 
      .requestIdToken(getString(R.string.google_server_client_id)) 
      .requestId() 
      .build(); 

    // Build a GoogleApiClient with access to the Google Sign-In API and the 
    // options specified by gso. 
    googleApiClient = new GoogleApiClient.Builder(this) 
      .enableAutoManage(this, this) 
      .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
      .build(); 

    SignInButton signInButton = (SignInButton) findViewById(R.id.signin_with_google_btn); 
    signInButton.setSize(SignInButton.SIZE_WIDE); 
    signInButton.setScopes(gso.getScopeArray()); 
    signInButton.setColorScheme(SignInButton.COLOR_DARK); 
} 

@Override 
public void onClick(View view) { 
    this.signinWithGoogle(); 
} 

/** 
* Triggers Google signin 
*/ 
private void signinWithGoogle() { 
    Log.v(this, "Signing in with Google..."); 

    Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(googleApiClient); 
    this.startActivityForResult(signInIntent, GOOGLE_SIGN_IN); 
} 

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

    if (requestCode == GOOGLE_SIGN_IN) { 
     GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
     this.handleGoogleSignInResult(result); 
    } else { 
     // Other stuff 
    } 
} 


/** 
* Handle Google sign in result 
*/ 
private void handleGoogleSignInResult(GoogleSignInResult result) { 

    if (result.isSuccess()) { 

     Log.v(this, "Successfully logged in with Google..."); 

     GoogleSignInAccount acct = result.getSignInAccount(); 
     Log.v(this, "Signed in as %s/%s (token %s)", acct.getDisplayName(), acct.getEmail(), acct.getIdToken()); 
     Map<String, String> logins = new HashMap<>(); 
     logins.put("accounts.google.com", acct.getIdToken()); 
     Log.v(SigninActivity.this, "Google token <<<\n%s\n>>>", logins.get("accounts.google.com")); 
     credentialsProvider.setLogins(logins); 
    } else { 
     // Signed out 
     Log.w(this, "Failed to authenticate against Google #%d - %s", result.getStatus().getStatusCode(), result.getStatus().getStatusMessage()); 

     SimpleMessageDialog.show(SigninActivity.this, 
       R.drawable.icon, 
       R.string.error, 
       R.string.sorry_error_signing_you_in_please_try_again, 
       R.string.try_again); 
    } 
} 

cevap

0

here belgelenen tüm adımları izliyor musunuz? SDK, geçerli bir jetonun karşılığında otomatik olarak AWS kimlik bilgilerini alır, ancak Google jetonunuzun süresi dolduysa, yenilemeniz gerekir.

+0

Merhaba Rachit, cevabınız için teşekkürler, sorumu düzenledim ve kodumu ekledim. Genel olarak, token yenilemenin ve gerenenin "hataların üzerine yazılanlar" (kullanıcı, bu tür şeyleri geri çekmesi) üzerinde nasıl durulacağıyla ilgili örneklerle gerçekten yardımcı olacaktır. – jmc34

+0

Bu nedenle, google jetonunu yenilemek kişisel tercihlere bağlıdır ve geliştiricilerin http://stackoverflow.com/questions/18572088/how-to-get-oauth-2-refresh-token-using-access satırlarında bir şeyler yaptıklarını gördük -jeton. Bununla birlikte, belirteçleri yenilemek için yardımcı yöntemler sağlama konusunda müşteri isteklerini duyduk ve bunları gelecek sürümlerde eklemeyi düşüneceğiz. –

+0

Rachit, Bu şartı sadece ikinci kez yapabilirim. Sana bir şey yapmıyorum, ama bu kutunun dışında yönetilmemesi oldukça hayal kırıklığı yaratıyor. Kafam karışmamış olmadıkça, bu oldukça basit bir gereksinim gibi görünüyor ve SDK, katma değere odaklanmamıza izin vermek için türden şeylerle uğraşmalı. – jmc34

İlgili konular