簡體   English   中英

無法使用來自 AWS 的 CognitoIdentityServiceProvider SDK

[英]Unable to use CognitoIdentityServiceProvider from AWS SDK

我目前正在使用amazon-cognito-identity-jsCognitoIdentityServiceProvider

並關注這篇文章https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityServiceProvider.html

調用listUsersInGroup function 時,我正在使用accessKeyIdsecretAccessKey初始化this.cognitoProvider

有沒有一種方法可以在不指定accessKeyIdsecretAccessKey CognitoIdentityServiceProvider 我不想指定這些密鑰,因為它包含敏感信息

這行得通

import { Config, CognitoIdentityCredentials, CognitoIdentityServiceProvider } from "aws-sdk";

export default class CognitoAuth {

   configure(config) {
     if (typeof config !== 'object' || Array.isArray(config)) {
       throw new Error('[CognitoAuth error] valid option object required')
     }
    
     this.userPool = new CognitoUserPool({
       UserPoolId: config.IDENTITY_POOL_ID,
       ClientId: config.CLIENT_ID
     })

     this.cognitoProvider = new CognitoIdentityServiceProvider({
       region: config.REGION,
       accessKeyId: config.ACCESS_KEY_ID,
       secretAccessKey: config.SECRET_ACCESS_KEY
     });

    Config.region = config.REGION

    Config.credentials = new CognitoIdentityCredentials({
      IdentityPoolId: config.IDENTITY_POOL_ID
    })

    this.options = config

   }

   getUsersInGroup(context, cb) {
     var params = {
       GroupName: context.group,
       UserPoolId: this.options.IDENTITY_POOL_ID
     };

     this.cognitoProvider.listUsersInGroup(params, (err, data) => {
       if (err) console.log(err, err.stack)
       else cb(null, data.Users)
     })
   }
  
}

這行不通

this.cognitoProvider = new AWS.CognitoIdentityServiceProvider({ apiVersion: '2016-04-18' })

但我收到錯誤ConfigError: Missing region in config

根據您鏈接的文檔頁面,調用listUsersInGroup需要開發人員憑據,因此必須以某種方式提供這些憑據。

如果您查看Node.js 中的設置憑據,可以通過不同的方式傳遞它們,例如,如果在 Lambda(或 EC2 實例)上運行此 function,它將使用 Lambda(或 EC2 實例)角色權限來調用該方法並且無需傳遞憑據。 其他選項使用環境變量 ( AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY ) 或共享憑證文件。

但是,您的直接問題似乎與該地區有關。 在工作塊中它通過region: config.REGION,傳遞時,它在非工作塊中丟失。 您可以通過在實例化 CognitoIdentityServiceProvider 時傳遞region參數來解決此問題:

this.cognitoProvider = new AWS.CognitoIdentityServiceProvider({ 
  apiVersion: '2016-04-18', 
  region: 'us-east-1' // use your region
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM