Docs 菜单

Docs 主页Atlas App Services

身份验证触发器

在此页面上

  • 创建身份验证触发器
  • 配置
  • 身份验证事件
  • 例子
  • 其他示例

当用户与身份验证提供程序交互时,会触发身份验证触发器。 您可以使用身份验证触发器来实施高级用户管理。部分用途包括:

  • 在关联集群中存储新用户数据

  • 在删除用户时保持数据完整性

  • 在用户登录时使用用户信息调用服务。

身份验证触发器具有以下配置选项:

字段
说明
Trigger Type
trigger的类型。对于身份验证触发器,请将此值设置为 AUTHENTICATION
Trigger Name
触发器名称。
Linked Function
触发器在触发时执行的函数的名称。身份验证事件对象会导致触发器触发。该对象是触发器传递给函数的唯一参数。
Operation Type
导致触发器触发的身份验证操作类型
Providers
一个或多个身份验证提供程序类型的列表。触发器仅侦听这些提供程序生成的身份验证事件

身份验证事件表示用户与身份验证提供者的交互。每个事件对应具有以下操作类型之一的单个用户操作:

操作类型
说明
LOGIN
表示用户登录的单个实例。
CREATE
表示创建新用户。
DELETE
表示删除用户。

身份验证事件对象具有以下形式:

{
"operationType": <string>,
"providers": <array of strings>,
"user": <user object>,
"time": <ISODate>
}
字段
说明
operationType
身份验证事件的操作类型
providers

发出该事件的身份验证提供者

以下名称之一代表每个身份验证提供者:

  • "anon-user"

  • "local-userpass"

  • "api-key"

  • "custom-token"

  • "custom-function"

  • "oauth2-facebook"

  • "oauth2-google"

  • "oauth2-apple"

注意

通常,每个事件只有一个身份验证提供者发出。但是,您可能需要删除链接到多个提供商的用户。 在这种情况下,该用户的DELETE事件包括所有链接的提供商。

user
与身份验证提供者交互的用户的对象
time
事件发生的时间。

一家在线商店希望在Atlas中存储每个客户的自定义元数据。每个客户都需要store.customers集合中的一个文档。然后,商店可以在客户文档中记录和查询元数据。

该集合必须代表每个客户。为保证这一点,商店创建了身份验证触发器。此触发器侦听电子邮件/密码身份验证提供程序中新创建的用户。然后,它将身份验证事件对象传递给其链接函数createNewUserDocument 。该函数创建一个描述用户及其活动的新文档。然后,该函数将该文档插入到store.customers集合中。

createNewUserDocument
exports = async function(authEvent) {
const mongodb = context.services.get("mongodb-atlas");
const customers = mongodb.db("store").collection("customers");
const { user, time } = authEvent;
const isLinkedUser = user.identities.length > 1;
if(isLinkedUser) {
const { identities } = user;
return users.updateOne(
{ id: user.id },
{ $set: { identities } }
)
} else {
return users.insertOne({ _id: user.id, ...user })
.catch(console.error)
}
await customers.insertOne(newUser);
}

有关集成到 App Services App 中的触发器的其他示例,请 查看 Github 上的示例触发器。

← 数据库触发器