簡體   English   中英

在帶有 npm 的 Lambda 函數中使用 AWS Cognito

[英]Using AWS Cognito in a Lambda function with npm

我正在嘗試在 Lambda 函數中使用 AWS Cognito 來授權用戶。

我有一些來自 Udemy 課程的示例代碼(不再可用): https ://www.udemy.com/minimum-viable-aws-cognito-user-auth-in-javascript

該代碼使用腳本文件:

aws-cognito-sdk.min.js 亞馬遜-cognito-identity.min.js

第二個似乎由 npm 提供:amazon-cognito-identity-js

第一個文件應該是 aws-sdk 的精簡版,只有 Cognito api 組件。 完整的 aws-sdk 可從 npm 獲得:aws-sdk 但我在 npm 中找不到縮減版本。

縮減文件:aws-cognito-sdk.min.js 是否在 npm 中可用?

編輯:根據羅素的說法,我應該使用 aws-sdk 包。

所以如果我有代碼:

const AWS = require('aws-sdk');

var authenticationDetails = new AWS.AWSCognito.CognitoIdentityServiceProvider.AuthenticationDetails(authenticationData);

我收到錯誤:

無法讀取未定義的屬性“CognitoIdentityServiceProvider”

AuthenticationDetails 的正確路徑是什么?

得到這個工作。

package.json 需要依賴:

"amazon-cognito-identity-js": "^1.31.0",
"aws-sdk": "^2.182.0",

AWS Lambda 不使用 Javascript ES6,因此您不能使用“import”關鍵字。

        const AWS = require('aws-sdk');

        var AmazonCognitoIdentity = require('amazon-cognito-identity-js');
        var CognitoUserPool = AmazonCognitoIdentity.CognitoUserPool;
        var AuthenticationDetails = AmazonCognitoIdentity.AuthenticationDetails;
        var CognitoUser = AmazonCognitoIdentity.CognitoUser;

        var poolData = {
            UserPoolId: 'THE USER POOL ID',
            ClientId: 'THE CLIENT ID'
        };
        var userPool = new CognitoUserPool(poolData);

        AWS.config.region = 'AWS_REGION';
        AWS.config.credentials = new AWS.CognitoIdentityCredentials({
            IdentityPoolId: 'THE USERPOOL ID',
        });
        var email = "someone@somewhere.com";
        var password = "password";

        var authenticationData = {
            Username: email,
            Password: password
        };
        var authenticationDetails = new AuthenticationDetails(authenticationData);

        var userData = {
            Username: email,
            Pool: userPool
        };

        var cognitoUser = new CognitoUser(userData);

        console.log(result);
        cognitoUser.authenticateUser(authenticationDetails, {
            onSuccess: function (result) {
              console.log('access token + ' + result.getAccessToken().getJwtToken());
              callback(null, result);
            },

            onFailure: function (err) {
              console.log('Login error: ' + err);
              callback(null, result);
            }
        });

我相信您在這里指的是 amazon-cognito-identity-js npm 包: https ://www.npmjs.com/package/amazon-cognito-identity-js

NPM 包包括這兩個文件。

該軟件包包括 cognito SDK 調用 (aws-cognito-sdk)。 它還取決於核心 AWS 開發工具包。

對於 Lambda,請使用aws-sdk模塊,如下所示:

const { CognitoIdentityServiceProvider } = require('aws-sdk')
//or 
const CognitoIdentityServiceProvider = require('aws-sdk/clients/cognitoidentityserviceprovider') // Much smaller size

對於身份驗證,請使用AdminInitiateAuth方法。

  const cognitoProvider =  new CognitoIdentityServiceProvider({
      apiVersion: '2016-04-18',
      accessKeyId:...
      secretAccessKey: ...
      region:...
    })

    await cognitoProvider.adminInitiateAuth(...)

amazon-cognito-identity-js包適用於前端客戶端(React、React Native 等)。 它僅包含連接到 Cognito 所需的功能。 它不需要aws-sdk模塊(除非您需要額外的功能)。

雖然您可以將amazon-cognito-identity-js用於您的用例,但它遠非理想,因為與使用您的 api 密鑰加載管理方法相比,您只是假裝是功能有限的未經身份驗證的用戶,從而為您提供更多的功能。

暫無
暫無

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

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