Docs 菜单
Docs 主页
/
MongoDB Atlas
/ /

身份验证触发器

在此页面上

  • 配置
  • 身份验证事件
  • 例子

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

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

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

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

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

字段
说明

Trigger Type

trigger的类型。 对于身份验证触发器,请将此值设立为 AUTHENTICATION

Trigger Name

触发器名称。

Linked Function

触发器触发时执行的 函数的名称。在身份验证事件对象导致触发器触发后,该对象是触发器传递给函数的唯一参数。

Operation Type

导致触发器触发的身份验证操作类型。

Providers

一个或多个身份验证提供者类型的列表。 trigger仅侦听这些提供程序生成的身份验证事件。

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

操作类型
说明

LOGIN

表示用户登录的单个实例。

CREATE

表示创建新用户。

DELETE

表示删除用户。 如果已删除的用户已链接到多个提供程序,则该用户的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"

user

与身份验证提供者交互的用户的用户对象。

time

事件发生的时间。

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

该集合必须代表每个客户。 为保证这一点,存储创建了一个身份验证trigger 。 此trigger侦听电子邮件/密码身份验证提供者中新创建的用户,然后将身份验证事件对象传递给其链接的函数 createNewUserDocument

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);
}

提示

另请参阅:

后退

定时触发器