Docs 菜单
Docs 主页
/ /
Atlas App Services
/

身份验证触发器

在此页面上

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

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

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

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

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

要在trigger 用户界面中打开身份验证Atlas App Services 配置屏幕,请单击左侧导航菜单中的Triggers Create a TriggerAuthentication,单击 ,然后选择 旁边的Trigger Type 标签页。

配置触发器,然后单击页面底部的 Save,将其添加到当前部署草稿中。

在用户界面中配置的身份验证trigger示例
点击放大

要使用 创建身份验证trigger App Services CLI:

  1. 将身份验证trigger配置文件添加到本地应用程序目录的 triggers 子目录中。

    注意

    App Services不会实施Atlas trigger配置文件的特定文件名。 但是,导入后, App Services将重命名每个配置文件,以匹配其定义的trigger名称,例如 mytrigger.json

  2. 部署 trigger:

    appservices push

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

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

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

操作类型
说明
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集合中的一个文档。 然后,存储可以在客户文档中记录和查询元数据。

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

配置触发器的示例 UI
触发器配置
{
"type": "AUTHENTICATION",
"name": "newUserHandler",
"function_name": "createNewUserDocument",
"config": {
"providers": ["local-userpass"],
"operation_type": "CREATE"
},
"disabled": false
}
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上的示例触发器。

后退

数据库触发器