2017-02-17 37 views
0

私はAmazon Cognitoを使用してユーザーを登録するには、以下のコードを使用しています。ユーザーがサインアップするとAmazon S3バケットにファイルをアップロードしたいと考えています。Amazon CognitoのログインでAmazon S3にアップロード

ユーザーがサインアップしたら、バケットをアップロードする準備ができたらどうすればよいですか? あなたが

var roleArn = 'arn:aws:iam::123456:role/Cognito_Auth_Role'; 
    var bucketName = 'MY_BUCKET'; 
    AWS.config.region = 'eu-west-1'; 
     var poolData = { 
      UserPoolId : 'POOL_ID', // your user pool id here 
      ClientId : 'CLIENT_ID' // your app client id here 
     }; 
     var userPool = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool(poolData); 
     var userData = { 
      Username : 'username', // your username here 
      Pool : userPool 
     }; 
     var attributeList = []; 
     var password 
     //Create Bucket 
     var bucket = new AWS.S3({ 
     params: { 
      Bucket: bucketName 
     } 
    }); 

var dataEmail = { 
    Name : 'email', 
    Value : '[email protected]' // your email here 
}; 
var dataPhoneNumber = { 
    Name : 'phone_number', 
    Value : '+1234567890' // your phone number here with +country code and no delimiters in front 
}; 

...

var attributeEmail = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserAttribute(dataEmail); 
var attributePhoneNumber = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserAttribute(dataPhoneNumber); 
attributeList.push(attributeEmail); 
attributeList.push(attributePhoneNumber); 
var cognitoUser; 
userPool.signUp('username', 'password', attributeList, null, function(err, result){ 
    if (err) { 
     alert(err); 
     return; 
    } 
    cognitoUser = result.user; 
    console.log('user name is ' + cognitoUser.getUsername()); 

}); 

答えて

2

あなたはCognitoフェデレーションIDのIDプールを作成する必要がありますありがとうございました。ユーザープールを、認証されたIDの特定のIDプールのIDプロバイダーにします。

上記のコードをユーザーにサインアップした後、あなたが彼を確認し、ログインして(自分の情報をプレースホルダを置き換える)以下のコードを使用してAWSの資格情報を取得する必要があります:で

var cognitoUser = userPool.getCurrentUser(); 

if (cognitoUser != null) { 
    cognitoUser.getSession(function(err, result) { 
     if (result) { 
      console.log('You are now logged in.'); 

      // Add the User's Id Token to the Cognito credentials login map. 
      AWS.config.credentials = new AWS.CognitoIdentityCredentials({ 
       IdentityPoolId: 'YOUR_IDENTITY_POOL_ID', 
       Logins: { 
        'cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>': result.getIdToken().getJwtToken() 
       } 
      }); 
     } 
    }); 
} 
//call refresh method in order to authenticate user and get new temp credentials 
AWS.config.credentials.refresh((error) => { 
    if (error) { 
     console.error(error); 
    } else { 
     console.log('Successfully logged!'); 
    } 
    }); 

そのコードブロックの終わりに、javascript用のメインAWS SDK(s3クライアント)でS3にファイルをアップロードするために使用できるAWS資格情報を取得しました。

+0

こんにちは。 Chromeのコンソールからこのエラーが表示されます。キャッチされていないエラー:ヌルのプロパティ 'refresh'を読み取ることができません。 –

+0

ありがとうございました。 cognitoを使用してS3に画像をアップロードしようとすると、とても不満を感じていたので、あなたのコードを見つけました...ありがとう。 –

+0

私はあまりにも早く話しました! Unauthenticated identiesを使用してログインしていたことが判明しました。これを無効にすると、すぐにNotAuthorizedException例外が発生します。 –

関連する問題