2017-04-07 94 views
1

我試圖在認證用戶確認其註冊後在ddb中創建用戶記錄。我希望使用用戶的(聯合)身份標識作爲主鍵。AWS Cognito - 如何在用戶確認註冊後在dynamodb中創建用戶記錄

但是,身份ID在postConfirmation lambda觸發器中不可用。實際上,只有用戶使用其訪問令牌進行身份驗證後,身份標識才可用。我猜這是有道理的,因爲認知用戶池是一個提供者,如Facebook和谷歌。在他們使用該提供者登錄之前,您不會創建身份。

與facebook和google不同的是,在登錄到cognito用戶池時,沒有oauth回調會創建記錄。用戶只需在簽署像這樣:

cognitoUser.authenticateUser(authenticationDetails, { 
    onSuccess: function (result) { 
     console.log('access token + ' + result.getAccessToken().getJwtToken()); 
     AWS.config.credentials = new AWS.CognitoIdentityCredentials({ 
      IdentityPoolId: self.IdentityPoolId, 
      Logins: { 
       [`cognito-idp.${self.region}.amazonaws.com/${self.poolData.UserPoolId}`]: result.getIdToken().getJwtToken() 
      } 
     }); 
     console.log("AuthService: set the AWS credentials - " + JSON.stringify(AWS.config.credentials)); 
     self.currentUser = cognitoUser; 
     cb(null, result); 
    }, 

    onFailure: function(err) { 
     console.log(err); 
     cb(err, null); 
    } 

}); 

然後才創建的身份標識。那麼實現創建用戶記錄的標準方法是什麼?用戶首次登錄時創建記錄是否標準?

回答

2

我認爲有幾種方法可以做到這一點。一個可能是使用該子值作爲密鑰而不是身份標識。它在創建時被賦予給用戶,並且是全球唯一的(如身份標識)。如果你走這條路線,你對使用postConfirmation回調的想法很好。

如果您確實需要身份標識(如果您有其他AWS資源可以訪問並希望訪問它們,那麼您可能會建議將自己的鉤子構建到onSuccess模塊​​中)。檢查是否存在該身份標識的行,如果是,則不做任何事情。如果沒有,創建它。這對你的用例有意義嗎?還是有更多的皺紋?

+0

我的用例是使用一個api網關端點,例如/ users /:id/projects來獲取用戶的所有項目。使用子值或身份ID會更容易嗎?我在想身份證。 – user1411469

+0

用戶池與API GW緊密集成。如果你正在映射API GW後面的所有東西,你可以使用sub來代替。如果您想直接從客戶端訪問Dynamo等內容,則使用身份標識代替會更好。無論如何,我認爲這項工作非常相似。 –

+0

通過全球唯一的,你的意思是所有的用戶池中subs都是唯一的嗎? – user1411469