gpt4 book ai didi

android - AWS 认知 : dealing with token expiration time

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:42:51 29 4
gpt4 key购买 nike

我正在试验 Cognito,当我认为它开始没问题时,我遇到了 (Google) token 在 1 小时后过期的问题。

当我开始使用干净的设备时,我可以注册并使用该应用程序 1 小时,然后当我需要刷新数据集时,我会收到错误消息,提示 token 未被授权。

有没有关于如何处理这个的例子?

这真的是应用程序开发人员应该做的事情吗?我期待 SDK 在后台管理这些事情。

这是否意味着我们必须在每次数据集同步之前检查 credentialsProvider.getSessionCredentitalsExpiration()?

非常感谢,JM

编辑 1:添加代码

我确实有一个 SigninActivity,但只有在根本不存在凭据时才会调用它,理论上只会在用户第一次登录时调用一次。

它的构建如下(删除了无用的位)。所以发生的事情是我第一次进行了身份验证,但由于我再也没有进入此 Activity ,所以可能缺少某些东西。

但必须有一种方法可以静默刷新此 token 吗?

@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);
}
}

最佳答案

您是否遵循记录的所有步骤 here ? SDK 将自动为您获取 AWS 凭据以交换有效 token ,但如果您的 Google token 已过期,则您需要刷新它。

关于android - AWS 认知 : dealing with token expiration time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35295938/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com