Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了node.js – AWS – nodejs SDK – CognitoIdentityServiceProvider.initiateAuth – CredentialsError:配置中缺少凭据大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_502_1@我正在尝试使用带有用户池的AWS Cognito通过我的API进行身份验证.我有一个通过AWS Cognito用户池创建的用户,我正在尝试使用该用户登录.

我得到的错误是CredentialsError:配置中缺少凭据.特别是它告诉我我需要一个IdentityPoolId.但我似乎无法在我的AWS控制台中找到此IdentityPoolId.在哪里,我从我的用户池得到这个?我看到的只是一个Pool id和一个Pool ARN.

相关源代码

var aws = require('aws-sdk');
aws.config.update({
    region: 'us-east-1',credentials: new aws.CognitoIdentityCredentials({
        IdentityPoolId: '???'
    })
});


var authUser = function(params,callBACk)
{
    if (!params || !params.Email || !params._password)
    {
        callBACk(new Error('Invalid parameters.'));
        return false;
    }

    var cognito = new aws.CognitoIdentityserviceProvider();

    var authParams = {
        AuthFlow: 'user_SRP_AUTH',// not sure what this means...
        ClientId: conf.AWSConfig.ClientId,AuthParameters: {
            Username: params.Email,password: params._password
        }
    };

    cognito.initiateAuth(authParams,function(err,data)
    {
        if (err)
        {
            console.log('Error details: ' + util.inspect(err));
            callBACk(err);
            return false;
        }
        callBACk(null,{success: true,data: data});
    });
}

对于authParams对象,我不确定AuthFlow应该是什么.看看http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityServiceProvider.html#initiateAuth-property,似乎user_SRP_AUTH就是@R_421_10675@用的东西.

编辑:

我相信我可能已经找到了获取IdentityPoolId的位置.我在编辑身份池时查看了“联合身份”部分并添加到“身份验证提供程序”部分下的相应“用户池”中.

我通过输入该用户池的用户池ID和应用客户端ID,将Cognito的身份验证提供程序与我创建的用户池相关联.现在使用相同的代码使用该标识池ID我收到错误CredentialsError:配置中缺少凭据.它表示此身份池不支持未经授权的访问.好的……我正在尝试授权用户……我是否需要创建一个未经身份验证的角色,以便用户可以在未经过身份验证时进行身份验证?如果这就是我需要做的事,这似乎很愚蠢.

编辑2:

我还应该注意到,我能够使用Javascript SDK(而不是nodejs)登录获取AccessToken以及IdToken和refreshToken.我这样做了,不需要IdentityPoolId.我需要的唯一东西是UserPoolId和ClientId.

var authenticateUser = function(onsuccessCallBACk)
{
    var authData = {
        Username: getUserName(),// gets username from an html text field
        password: getpassword()  // gets password from an html password field
    };

    var authDetails = new AWSCognito.CognitoIdentityserviceProvider.AuthenticationDetails(authData);

    var cognitoUser = getCognitoUser();

    cognitoUser.authenticateUser(authDetails,{
        onsuccess: function(result)
        {
            console.log('access token: ' + result.getAccessToken().getJwtToken());
            console.log('idToken: ' + result.idToken.jwtToken);
            console.log(result);

            if (onsuccessCallBACk && typeof(onsuccessCallBACk) == 'function')
            {
                onsuccessCallBACk(cognitoUser);
            }
        },onFailure: function(err)
        {
            // UserNotConfirmedException: User is not confirmed.
            console.log('authError');
            alert(err);
        }
    });
}

解决方法

事实证明,initiateAuth完全不是我想做的事情.我也错过了名为amazon-cognito-identity-js的npm包.安装后我更新了我的代码如下:
var authUser = function(params,callBACk)
{
    if (!params || !params.Email || !params._password)
    {
        callBACk(new Error('Invalid parameters.'));
        return false;
    }

    var poolData = {
        UserPoolId: conf.AWSConfig.UserPoolId,ClientId: conf.AWSConfig.ClientId
    };

    var userPool = new aws.CognitoIdentityserviceProvider.CognitoUserPool(poolData);
    var authData = {
        Username: params.Email,password: params._password
    };

    var authDetails = new aws.CognitoIdentityserviceProvider.AuthenticationDetails(authData);
    var userData = {
        Username: params.Email,Pool: userPool
    };

    var cognitoUser = new aws.CognitoIdentityserviceProvider.CognitoUser(userData);

    cognitoUser.authenticateUser(authDetails,{
        onsuccess: function(result)
        {
            callBACk(null,data: result});
        },onFailure: function(err)
        {
            console.log('authUser error: ' + util.inspect(err));
            callBACk(err);
        }
    });
}

我现在成功获得了令牌的回复!万岁!

大佬总结

以上是大佬教程为你收集整理的node.js – AWS – nodejs SDK – CognitoIdentityServiceProvider.initiateAuth – CredentialsError:配置中缺少凭据全部内容,希望文章能够帮你解决node.js – AWS – nodejs SDK – CognitoIdentityServiceProvider.initiateAuth – CredentialsError:配置中缺少凭据所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。