我正在使用AWS Cognito,通过MobileHub与iOS应用程序集成,通过Facebook登录。一切正常,直到我注销现有身份并尝试使用另一个FB帐户登录(或甚至使用相同的帐户)。
在这种情况下,每次我调用任何AWS Lambda时,都会出现此错误:
AWSiOSSDK v2.4.9[错误]AWSCredentialsProvider.m行:577。
[AWSCOgnitoredentialsProvider凭据]。
无法刷新。错误为[Error Domain=com.amazonaws.awscognitoidentityerromain Code=8“(null)”UserInfo={{uuuu type=NotAuthorizedException,message=Unauthenticated access不支持此标识池。}]
但如果我终止并重新启动应用程序,一切都会恢复正常。
此错误源于:
从阅读AWS SDK代码中,我看到,发生这种情况是因为认知身份无法从这里的凭据提供商获得登录:
我想这是意料之中的,因为我已经注销了。但问题是,即使在登录FB AWS后,仍然认为我未经授权。从StackOverflow上类似的问题中我看到,过去人们在AWSCOgnitoRedentialsProvider上手动设置登录字典。但现在该属性已被弃用,其他类似属性为只读。
这里是我的AWS设置在App委托didFinishLaunchingAnd Options方法:
let cred = AWSCognitoCredentialsProvider(regionType: .euWest1, identityPoolId: "POOLID")
let config = AWSServiceConfiguration(region: .euWest1, credentialsProvider: cred)
AWSServiceManager.default().defaultServiceConfiguration = config
if let config = config {
config.timeoutIntervalForRequest = 30
config.timeoutIntervalForResource = 30
config.maxRetryCount = 3
AWSLambdaInvoker.register(with: config, forKey: "key")
}
let mapperConfiguration = AWSDynamoDBObjectMapperConfiguration()
mapperConfiguration.saveBehavior = .updateSkipNullAttributes
AWSDynamoDBObjectMapper.register(with: config!, objectMapperConfiguration: mapperConfiguration, forKey: "updateObjectMapper")
这是注销代码:
AWSIdentityManager.defaultIdentityManager().logout { (result, error) in
if let cp = AWSServiceManager.default().defaultServiceConfiguration.credentialsProvider as? AWSCognitoCredentialsProvider {
cp.clearKeychain()
}
// Open login screen
}
请注意,我尝试了清除钥匙链和不清除钥匙链。结果是一样的。
我真的很感激任何帮助<向你问好,亚历克斯
您是在logins方法的实现中这样做的吗?
- (AWSTask<NSDictionary<NSString *, NSString *> *> *)logins {
FBSDKAccessToken* fbToken = [FBSDKAccessToken currentAccessToken];
if(fbToken){
NSString *token = fbToken.tokenString;
return [AWSTask taskWithResult: @{ AWSIdentityProviderFacebook : token }];
}else{
return [AWSTask taskWithError:[NSError errorWithDomain:@"Facebook Login"
code:-1
userInfo:@{@"error":@"No current Facebook access token"}]];
}
}
更多细节。
我在一个组件中有以下内容: 脚本: 因此,我将表单数据提交到我的数据库,然后在成功promise中,我使用它。$refs.form.reset();重新设置我的表单。 但是,我会立即收到错误消息,并且在每次提交后都会收到错误消息: "[Vue警告]:错误在下一个滴答:"TypeError:无法读取属性'长度'的未定义" 和 TypeError:无法读取未定义的属性“length”
问题内容: 我想在用户输入错误的同时在“视图”页面中显示验证错误。可以的是,当用户输入错误时,它不会在数据库中保存任何内容。但是用户视图页面中没有错误消息。如果有人发现错误,请帮助我。 这是控制器: 这是路线: 这是刀片视图页面: 这是错误消息块: 问题答案: 如果您使用的是5.2.27或更高版本,请尝试删除中间件。现在,Laravel会自动将中间件应用于内部的所有路由,如果您尝试手动添加它,则会
任何帮助都会很好! 编辑:我正在使用Java 8
重复的步骤 登录 注销 从服务器登录并获取422无法验证CSRF令牌的真实性 Gems 设计3.5.2 设计令牌\u验证0.1.36 根据其他线程,解决方案是在注销时返回一个新的csrf令牌,然后在客户端的注销成功处理程序中,将XSRF-TOKEN的cookie设置为接收的令牌。我使用的代码如下。有人能告诉我为什么它不起作用吗?最后一个登录请求看起来使用了新的令牌,所以棱角分明的看起来像是从coo
我试图遵循google文档中提供的google日历api nodejs示例(https://developers.google.com/calendar/quickstart/nodejs)若要访问我的主要谷歌日历事件,我会收到以下错误:“超出了未经验证使用的每日限制。继续使用需要注册。” 我知道我正在正确地通过OAuth流程,因为我的具有日历访问权限的项目列在这里:https://myaccou
我正在使用jwt auth在我的API中创建RESTful身份验证资源。当客户端应用程序调用登录资源时,如果用户已登录,则必须使当前令牌无效,从而生成新令牌。 但如果当前令牌被列入黑名单,则会抛出。 如何验证令牌是否被列入黑名单?或者如何正确执行用户“注销”?我试图在jwt auth API源代码上找到,但不存在