@azure/identity node.js v18 aws lambda - ClientSecretCredential不是构造函数

yiytaume  于 2023-10-22  发布在  Node.js
关注(0)|答案(1)|浏览(142)

我已经开始学习如何实现AWS Lambda功能,并希望能够使用Azure AD进行身份验证以创建/更新用户。我得到以下错误:
ClientSecretCredential不是构造函数。
我明白这个错误的意思,但是我找不到任何地方为什么会发生这种情况--我看到的每个代码示例都使用了相同的方法,而且似乎对它们有效!
以前有没有人遇到过这种情况,我真的很感激任何指点。
下面是我的函数代码:

const { ClientSecretCredential } = import("@azure/identity");
const { GraphRbacManagementClient } = import("@azure/graph");

export const handler = async (event, context) => {
  try {
    // Azure AD authentication parameters
    const tenantId = process.env.TENANT_ID || 'YOUR_TENANT_ID';
    const clientId = process.env.CLIENT_ID || 'YOUR_CLIENT_ID';
    const clientSecret = process.env.CLIENT_SECRET || 'YOUR_CLIENT_SECRET';

    // Azure Graph API client
    const credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
    const graphClient = new GraphRbacManagementClient(credential, tenantId);

    // User details for update
    const userId = process.env.USER_ID || 'USER_OBJECT_ID';
    const updatedUserProperties = {
      accountEnabled: true,
      // Add other properties you want to update
    };

    // Update user in Azure AD
    const updatedUser = await graphClient.users.update(userId, updatedUserProperties);

    console.log('User updated:', updatedUser);
    
    return {
      statusCode: 200,
      body: JSON.stringify({ message: 'User updated successfully' }),
    };
  } catch (error) {
    console.error('Error:', error);

    return {
      statusCode: 500,
      body: JSON.stringify({ message: 'Internal Server Error' }),
    };
  }
};

这是控制台日志的输出:测试事件名称(未保存)测试事件

响应{“statusCode”:500,“身体”:“{“message”:“内部服务器错误”}”}
函数名START RequestId:bdf 79 a4 c-6d 4d-40 d8-b57 d-58166 e57 e13 c版本:$最新2023-10- 02 T12:03:09.302Z bdf 79 a4 c-6d 4d-40 d8-b57 d-58166 e57 e13 c错误错误:TypeError:ClientSecretCredential is not a constructorat software.handler(file:///var/task/index. mjs:12:24)at software. software OnceNonStreaming(file:///var/runtime/index. mjs:1147:29)END RequestId:bdf 79 a4 c-6d 4d-40 d8-b57 d-58166 e57 e13 c报告请求ID:bdf 79 a4 c-6d 4d-40 d8-b57 d-58166 e57 e13 c持续时间:503.37 ms计费持续时间:504 ms内存大小:1024 MB最大内存使用:94 MB初始化持续时间:188.92毫秒

先谢了。
我不希望收到ClientSecretCredential不是构造函数的错误消息。

c9x0cxw0

c9x0cxw01#

import语句只允许在ES模块中使用,如果type属性未设置为module,则不能在嵌入式脚本中使用。
您需要将"type": "module"添加到package.json文件中,以便告诉Node.js使用ES模块而不是传统的ES5语法,或者使用.mjs文件扩展名。
这些文档指的是:
默认情况下,Lambda将带有.js后缀的文件视为CommonJS模块。或者,您可以将代码指定为ES模块。您可以通过两种方式实现此操作:在函数的package.json文件中将类型指定为模块,或者使用.mjs文件扩展名。在第一种方法中,您的函数代码将所有.js文件视为ES模块,而在第二种情况下,只有您使用.mjs指定的文件才是ES模块。您可以通过分别命名.mjs和.cjs来混合ES模块和CommonJS模块,因为.mjs文件始终是ES模块,而.cjs文件始终是CommonJS模块。

相关问题