事前におかげでよろしく!iOSを搭載したAmazon Cognito:アイデンティティへのアクセスが禁止されています
Amazon Cognitoにデータを正しく保存/同期させるのに問題があります。 (Cognitoにデータを格納しない)dataset.synchronize()ラインで
(IDアウト主演で)、私は大きな出力誤差を得るような:
AWSCredentialsProvider.m line:429 | __73-[AWSCognitoCredentialsProvider
getCredentialsWithCognito:authenticated:]_block_invoke | GetCredentialsForIdentity
failed. Error is [Error Domain=com.amazonaws.AWSCognitoIdentityErrorDomain
Code=10 "(null)" UserInfo={__type=NotAuthorizedException, message=Access to
Identity '*****' is forbidden.}]
cognitoIDはゼロではありません、および適切に返します(と私はオンラインで読むことができる値マッチ)例えば
は、Facebookで認証した後、私は、次の手順を実行します。
if (FBSDKAccessToken.currentAccessToken() != nil)
{
let fbCognitoToken = FBSDKAccessToken.currentAccessToken().tokenString
credentialsProvider.logins = [AWSCognitoLoginProviderKey.Facebook.rawValue: fbCognitoToken]
// Retrieve your Amazon Cognito ID
credentialsProvider.getIdentityId().continueWithBlock { (task: AWSTask!) -> AnyObject! in
if (task.error != nil) {
print("Error: " + task.error!.localizedDescription)
}
else {
// the task result will contain the identity id
let cognitoId = task.result
//checking if cognito was successful, if true, sets success condition to true to prepare for segue into app
if cognitoId != nil{
print (cognitoId)
cognitoSuccess = true
let syncClient = AWSCognito.defaultCognito()
let dataset = syncClient.openOrCreateDataset("User_Data")
dataset.setString("[email protected]", forKey:"Email")
// credentialsProvider.refresh()
dataset.synchronize()
} }return nil}}
私は顔からデータを読み取ることができます私が知ることからすべての認証が正しく行われました。私はここに根源的な何かがあると思っていますが、数日を過ごした後、私はそれを理解できません! AWSポータルのIAMチェッカーを使用すると、Cognito関数のすべての「緑色のチェック」が返されるため、サーバーサイドの権限の問題ではないと確信しています。
ありがとうございました。
編集: 上記のコードの塊の前に、私は呼ん:
let credentialsProvider = self.initializeCognito()
(アイデンティティ・プールのIDが出て主演)実行される:
あなたがいるときに例外がスローされる可能性がfunc initializeCognito() -> AWSCognitoCredentialsProvider
{
let credentialsProvider = AWSCognitoCredentialsProvider(
regionType: AWSRegionType.USEast1, identityPoolId: "******")
let defaultServiceConfiguration = AWSServiceConfiguration(
region: AWSRegionType.USEast1, credentialsProvider: credentialsProvider)
AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = defaultServiceConfiguration
return credentialsProvider
}
ありがとうございました!上記の4行目のコードでは、FacebookのトークンをCognitoの資格情報プロバイダに渡します。これは不十分ですか?もし私が尋ねることができたら、私は何を書いておくべきですか?ありがとう! – kmypwn
これは少しずつ異なります。ログインしようとすると直ちに失敗しますか?または、アプリケーションを閉じて少し待っていますか?前者の場合、この資格プロバイダで同期クライアントを初期化していますか? –
Facebookへのログイン後(成功)、このコードはすぐに呼び出されます。 cognitoIDが「正しく」返されます。つまり、print(cognitoID)を使用して無意味なものが得られない場合は、一意の識別子(AWS Cognito Identity Browserが見つかるものと同じ)が正しく印刷されます。私はcredentialsProviderをコメントアウトしました。refresh()行を追加するだけですが、.synchronise()行にすでに用意されているような別のエラーが返されます。要するに、いいえ、近い/再開はありません! – kmypwn