我已经开始学习如何实现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不是构造函数的错误消息。
1条答案
按热度按时间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模块。