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);
}
}
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
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. –
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