我正在试验 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/
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
我知道还有其他相同的问题,但他们没有解决我的问题。我不断收到错误:Aws::Errors::MissingRegionErrorinBooksController#create,缺少区域;使用:region选项或将区域名称导出到ENV['AWS_REGION']。但是,这是我的配置开发.rb:config.paperclip_defaults={storage::s3,s3_host_name:"s3-us-west-2.amazonaws.com",s3_credentials:{bucket:ENV['AWS_BUCKET'],access_key_id:ENV['AWS_ACCE
EC2会在实例停止然后重新启动时为其提供新的IP地址,因此我需要能够自动管理route53记录集,以便我可以一致地访问内容。遗憾的是,sdk的route53部分的文档远不如ec2的文档那么健壮(可以理解),所以我有点卡住了。到目前为止,从我所看到的情况来看,似乎change_resource_record_sets(link)是可行的方法,但我对:chages需要什么感到困惑>因为它提到了一个Change对象,但没有提供指向所述对象描述的链接。这是我的代码目前的样子:r53.client.change_resource_record_sets(:hosted_zone_id=>'MY_
我正在为在AmazonEC2实例上运行的应用程序设计一个AutoScaling系统。应用程序从SQS读取消息并对其进行处理。AutoScaling系统将监控两件事:SQS中的消息数量,所有EC2机器上运行的进程总数。例如,如果SQS中的消息数量超过3000,我希望系统自动缩放,创建一个新的EC2实例,在其上部署代码,当消息数量低于2000时,我希望系统终止EC2实例.我正在用Ruby和Capistrano做这件事。我的问题是:我无法找到一种方法来确定在所有EC2机器上运行的进程数并将该数字保存在变量中。你能帮帮我吗? 最佳答案 您可
我正在构建一个部署在heroku上的rails5应用程序。我想用AWScongnito来实现单点登录,但是没有足够的例子来实现。我正在使用devise进行身份验证。现在我的目标是让我的所有用户都使用AWScognito并通过我的Rails应用程序对他们进行身份验证。这是我在AWScongnitowithrails上找到的唯一资源,我正在寻找一些示例应用程序或指向工具或rubyAPI文档的链接来实现此目的。请帮助。UpdateOnbasisOfBalaAnswerrequire'aws-sdk'ENV['AWS_ACCESS_KEY_ID']='XXXXXXXXXXXXXXXXX'E
在aws-s3中,有一种方法(AWS::S3::S3Object.stream)可让您将S3上的文件流式传输到本地文件。我无法在aws-sdk中找到类似的方法。即在aws-s3中,我这样做:File.open(to_file,"wb")do|file|AWS::S3::S3Object.stream(key,region)do|chunk|file.writechunkendendAWS::S3:S3Object.read方法确实将block作为参数,但似乎没有对其执行任何操作。 最佳答案 aws-sdkgem现在支持S3中对象的分
我使用了aws-sdk-coregem我在从aws获取url时遇到错误以下是我的代码definitialize(bucket:,region:)@bucket=bucketclient=Aws::S3::Client.new(region:region)@signer=Aws::S3::Presigner.new(client:client)enddefsign(key,expires_in:3600)@signer.presigned_url(:get_object,bucket:@bucket,key:key,expires_in:expires_in)end我遇到了错误NoMet
我有一个关于配置elasticsearch以连接AWSelasticsearch服务以在生产环境中运行项目的问题。我的gem文件:gem'searchkick'gem'faraday_middleware-aws-signers-v4'gem'aws-sdk','~>2'gem"elasticsearch",">=1.0.15"引用:https://github.com/ankane/searchkick我的config/initializers/elasticsearch.rb文件:require"faraday_middleware/aws_signers_v4"ENV["ELAS