news 2026/9/11 23:23:37

Cal.diy 怎么配置 Microsoft Graph 凭证接入 Office 365 日历

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Cal.diy 怎么配置 Microsoft Graph 凭证接入 Office 365 日历

Cal.diy 怎么配置 Microsoft Graph 凭证接入 Office 365 日历

【免费下载链接】cal.diyScheduling infrastructure for absolutely everyone.项目地址: https://gitcode.com/GitHub_Trending/ca/cal.diy

Cal.diy(Cal.com 的社区自托管版本)支持接入 Office 365 / Outlook.com 日历,实现方式为 OAuth:先在 Azure 中注册一个应用,拿到 Microsoft Graph 的 Client ID 与 Client Secret,把它们写入实例的环境变量,然后就能在 Cal.diy 的界面里连接日历。本文对应 微软接入文档 和 README.md 中的 "Obtaining Microsoft Graph Client ID and Secret" 一节,适用于自建(Docker 或源码部署)且可访问的 Cal.diy 实例;前提是你拥有一个能在 Azure 中创建应用注册的账号,并且知道实例的访问地址(下文记为<Cal.diy URL>,即你部署时使用的域名或http://localhost:3000)。

在 Azure 中注册应用并获取 Client ID / Secret

按 微软接入文档 的步骤操作:

  1. 在 Azure 门户中打开 App registrations(应用注册)页面,选择New registration
  2. 输入应用名称,完成注册。
  3. 在 "Who can use this application or access this API?"(谁可以使用此应用或访问此 API)一项中,选择Accounts in any organizational directory (Any Azure AD directory - Multitenant)(任何组织目录中的账户 - 多租户)。
  4. 添加Web类型的重定向 URI,值必须为:
<Cal.diy URL>/api/integrations/office365calendar/callback

<Cal.diy URL>替换为 Cal.diy 实际运行的地址。这个地址与回调代码中使用的路径/api/integrations/office365calendar/callback完全一致(见 callback 实现),改动了部署地址就要同步修改这里的重定向 URI。 5. 复制Application (client) ID,它的用途是.env中的MS_GRAPH_CLIENT_ID。 6. 进入Certificates & secrets(证书和密码),新建一条 client secret,复制生成的值作为MS_GRAPH_CLIENT_SECRET

把凭证写入环境变量

  • 文档 微软接入文档 要求把两个值分别写入.env文件的MS_GRAPH_CLIENT_IDMS_GRAPH_CLIENT_SECRET
  • 项目根目录下的 .env.appStore.example 模板中也有这两个字段,其注释标明它们用于 "Office 365 / Outlook.com Calendar / MS Teams integration":
MS_GRAPH_CLIENT_ID= MS_GRAPH_CLIENT_SECRET=

这两个变量是后续种子脚本向 App Store 数据库写入 Outlook Calendar 应用(含client_id/client_secret)的数据来源,见 seed-app-store.ts:只有当MS_GRAPH_CLIENT_IDMS_GRAPH_CLIENT_SECRET都已设置时,脚本才会插入office365-calendar应用及其凭证。

重新种子 App Store

README 中与 Google Calendar 同类的操作是:写入凭证后重新填充 App Store。对应命令(与 README "Adding google calendar to Cal.diy App Store" 一节给出的命令一致):

cd packages/prisma yarn seed-app-store

执行后,App Store 中会出现 "Outlook Calendar" 应用(应用元数据定义在 office365calendar/_metadata.ts,名称为 "Outlook Calendar",isOAuth: true,分类为 calendar)。

在 Cal.diy 界面中连接日历

README 的部署说明中提到:首次设置向导的 "Connect your Calendar" 步骤可以跳过,日历集成随时可以从Settings > Integrations页面添加。因此主路径是:

  1. 登录 Cal.diy,进入 Settings > Integrations(或 App Store)。
  2. 安装 Outlook Calendar 应用,页面会跳转到 Microsoft 登录页,用你的 Office 365 / Outlook 账户授权。
  3. 回调处理时,Cal.diy 向 Microsoft 请求的权限范围为offline_accessCalendars.ReadCalendars.ReadWrite(定义在 callback 实现 中)。授权成功后,回调逻辑会为当前用户创建office365_calendar类型的凭证,并把账户中的默认日历isDefaultCalendar为 true 的那个)设为该用户在 Cal.diy 中使用的日历。

结果验证与常见错误

连接是否成功,最直接的表现是 OAuth 回调后浏览器的落点(行为来自 callback 实现):

  • 成功:无错误参数地重定向回已安装应用页面(/apps/installed)或你发起安装前的页面。
  • 凭证未配置:回调返回 400,消息为Office 365 client_id missing.Office 365 client_secret missing.——说明环境变量没有生效,检查.env/.env.appStore并确认实例已用新变量重启。
  • ?error=no_default_calendar:该 Office 账户下找不到默认日历,需要在 Outlook 侧确认存在默认日历。
  • ?error=account_already_linked:该账户已有一条office365_calendar选择记录且无法复用旧凭证时出现。
  • ?error=something_went_wrong:写入selectedCalendar时的其他数据库错误。
  • 令牌交换失败:浏览器会跳转到/apps/installed?error=<Microsoft 返回的 JSON>,其中包含 Microsoft 侧的原始错误信息,可据此核对 Client ID、Secret 与重定向 URI 是否一致。

限制与边界

  • 应用注册必须设为多租户(Any Azure AD directory - Multitenant),文档中未提供单租户的替代说明。
  • 回调代码假定账户存在一个默认日历;只有单一日历的账户不受影响,多日历账户的默认日历由 Outlook 侧决定。
  • 本文只覆盖"连接 Office 365 日历"这一步;更换部署地址后务必同步更新 Azure 中的重定向 URI,否则授权完成后回调会失败。

【免费下载链接】cal.diyScheduling infrastructure for absolutely everyone.项目地址: https://gitcode.com/GitHub_Trending/ca/cal.diy

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 23:23:01

采样分辨率瓶颈详解:从ADC采样率到图像重建的工程实战

做嵌入式或者信号处理这行&#xff0c;几乎所有人都绕不开“采样”这个词。采样看着简单&#xff0c;就是把连续信号变成离散数据&#xff0c;但一旦较真起来&#xff0c;“分辨率”这个问题能把人坑到怀疑人生。我这几年调过的板子、查过的波形、改过的代码里&#xff0c;有一…

作者头像 李华
网站建设 2026/9/11 23:20:40

雷达动目标检测中Keystone变换的原理与sinc插值实现

简介&#xff1a;Keystone变换广泛应用于雷达、声纳、通信等领域&#xff0c;通过重新映射频率轴来校正运动目标回波中的距离徙动与多普勒耦合&#xff0c;是提高目标检测与成像精度的关键预处理步骤。这份资源提供基于Matlab的测试脚本testKeyStone.m&#xff0c;集中展示了DF…

作者头像 李华
网站建设 2026/9/11 23:20:02

用Django打造超市进销存系统:ORM、事务与库存管理详解

简介&#xff1a;基于Django的超市进销存销售管理系统毕业设计源码&#xff0c;面向计算机专业毕业生与课程设计学生&#xff0c;提供一套结构完整、可运行的Web项目范例。压缩包内共65个文件&#xff0c;以39个Python源码文件、16个HTML页面模板为主&#xff0c;附带SQL数据库…

作者头像 李华
网站建设 2026/9/11 23:19:48

电竞赛事快讯怎么做?从信息筛选到内容发布的完整方法论

做电竞内容这几年&#xff0c;我每天雷打不动要干的一件事&#xff0c;就是整理当天的“电竞赛事快讯”。像2026-09-08这种比赛密集的日子&#xff0c;LPL、LCK、KPL、无畏契约冠军赛可能同时开打&#xff0c;再加上次级联赛和第三方杯赛&#xff0c;信息量非常大。很多人觉得快…

作者头像 李华