繁体   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