跳到主要内容

邀请组织 (Organization) 成员

在多租户应用中,一个常见需求是邀请成员加入组织 (Organization)。本指南将介绍实现此功能的步骤和技术细节。

流程概览

整体流程如下图所示:

创建组织 (Organization) 角色

在邀请成员之前,需要创建组织 (Organization) 角色。参见 组织模板 了解更多关于角色和权限的信息。

在本指南中,我们依然创建两个典型的组织 (Organization) 角色:adminmember

admin 角色拥有对组织 (Organization) 内所有资源的完全访问权限,而 member 角色的访问权限有限。例如:

  • admin 角色:
    • read:data - 读取所有组织 (Organization) 数据资源的权限。
    • write:data - 写入所有组织 (Organization) 数据资源的权限。
    • delete:data - 删除所有组织 (Organization) 数据资源的权限。
    • invite:member - 邀请成员加入组织 (Organization)。
    • manage:member - 管理组织 (Organization) 内的成员。
    • delete:member - 移除组织 (Organization) 内的成员。
  • member 角色:
    • read:data - 读取所有组织 (Organization) 数据资源的权限。
    • write:data - 写入所有组织 (Organization) 数据资源的权限。
    • invite:member - 邀请成员加入组织 (Organization)。

你可以在 Logto 控制台 中轻松完成这些操作。你也可以使用 Logto Management API 以编程方式创建组织 (Organization) 角色。

配置你的邮件连接器 (Connector)

由于邀请是通过邮件发送的,请确保你的 邮件连接器 (Connector) 已正确配置。要发送邀请,请配置一个用法类型为 OrganizationInvitation邮件模板。你可以在内容中包含组织 (Organization)(如名称、Logo)和邀请人(如邮箱、姓名)的 变量,并根据需要自定义 本地化模板

以下是 OrganizationInvitation 用法类型的邮件模板示例:

{
"subject": "你被邀请加入 {{organization.name}}",
"content": "<p>你好,</p><p>{{inviter.name}} ({{inviter.primaryEmail}}) 邀请你加入 <strong>{{organization.name}}</strong>。</p><p>点击这个 <a href=\"{{link}}\" target=\"_blank\">链接</a> 接受邀请并开始体验。</p><p>如果你并未预期收到此邀请,可以放心忽略此邮件。</p>",
"usageType": "OrganizationInvitation",
"type": "text/html"
}

邮件内容中的 {{link}} 占位符会在发送邮件时被实际的邀请链接替换。

使用 Logto Management API 处理邀请

备注:

如果你还没有配置 Logto Management API,请参见 与 Management API 交互 获取详细信息。

使用 Logto Management API 创建组织 (Organization) 邀请

在组织 (Organization) 功能中有一组与邀请相关的 Management API。通过这些 API,你可以:

  • POST /api/organization-invitations:创建带有指定组织 (Organization) 角色的邀请。
  • POST /api/one-time-tokens:为被邀请者创建一次性令牌,用于其接受邀请时认证 (Authentication)。了解更多
  • POST /api/organization-invitations/{id}/message:通过邮件将组织 (Organization) 邀请发送给被邀请者。
备注:

请求体支持 link 属性,因此你可以基于邀请 ID 自定义自己的邀请链接。例如:

{
"link": "https://your-app.com/invitation/join?id=your-invitation-id&token=your-one-time-token&email=invitee-email"
}