Node.js连接SharePoint:现有Client ID代码失效,求用户名密码认证方案
当然可以通过用户名和密码连接SharePoint,无需使用客户端ID、客户端密钥和租户ID。在Node.js环境下,@pnp/nodejs包提供了UsernamePasswordFetchClient,专门用于这种用户名密码认证场景,下面是修改后的完整可运行代码:
import { sp } from "@pnp/sp"; import { UsernamePasswordFetchClient } from "@pnp/nodejs"; import xlsx from "xlsx"; import fs from "fs"; // SharePoint配置:使用用户名密码认证 sp.setup({ sp: { fetchClientFactory: () => new UsernamePasswordFetchClient( "<你的用户名>", // 格式支持 user@domain.com 或 domain\username "<你的密码>", "<sharepoint_site_url>" // 示例:https://yourdomain.sharepoint.com/sites/your-site ), baseUrl: "<sharepoint_site_url>", }, }); // 上传Excel到SharePoint文档库 async function uploadExcel(filePath, libraryName, fileName) { try { const fileBuffer = fs.readFileSync(filePath); await sp.web.getFolderByServerRelativeUrl(libraryName).files.add(fileName, fileBuffer, true); console.log("文件上传成功!"); } catch (err) { console.error("上传文件出错:", err); } } // 从SharePoint下载Excel文件 async function downloadExcel(libraryName, fileName, downloadPath) { try { const file = await sp.web.getFileByServerRelativeUrl(`${libraryName}/${fileName}`).getBuffer(); fs.writeFileSync(downloadPath, file); console.log("文件下载成功!"); } catch (err) { console.error("下载文件出错:", err); } } // 示例调用 const filePath = "example.xlsx"; const libraryName = "Shared Documents"; // 根据实际文档库名称修改 const fileName = "example.xlsx"; const downloadPath = "downloaded_example.xlsx"; // 执行上传和下载流程 (async () => { await uploadExcel(filePath, libraryName, fileName); await downloadExcel(libraryName, fileName, downloadPath); })();
关键注意事项
- 用户名格式:支持
user@yourdomain.com(UPN格式)或DOMAIN\username两种格式,根据你的SharePoint环境选择合适的格式 - MFA限制:如果账号启用了多因素认证(MFA),这种用户名密码认证方式无法生效,需要改用客户端凭据或其他支持MFA的认证方案
- 版本兼容:确保
@pnp/sp和@pnp/nodejs使用兼容的稳定版本,避免因版本不匹配导致的运行错误 - 权限要求:所用账号必须拥有目标文档库的读写权限,否则会返回权限不足的错误
内容的提问来源于stack exchange,提问作者zircon
相关产品推荐
相关产品推荐

