在新用户注册后用Auth0动作发送Slack消息

124 阅读11分钟

让一个新人在你的网站上注册是一个令人兴奋的经历。每当有人选择你的服务,在 "登录 "表格中输入他们的电子邮件和密码,并点击 "注册 "时,你就会感到一阵兴奋。通过创建一个Auth0动作,在新用户注册账户时向Slack发送消息,实时获得这种兴奋感。

你需要什么

  • Auth0账户。如果你还没有,你可以注册一个免费的Auth0账户

  • 我们Auth0租户中的应用程序。任何基于网络、移动或桌面的应用程序都可以使用。如果你没有任何使用Auth0的应用程序,你可以从Auth0 Quickstarts页面下载一个。

  • Slack账户。如果你属于一个Slack工作区,你已经有一个。如果你没有Slack账户,不用担心--你可以在创建Slack工作区后创建一个。

  • Slack工作区。你需要访问一个管理员会批准你的应用程序的Slack工作区,或者一个你是管理员的工作区。如果这两点都不适合你,请按照下一节的步骤,在那里你将建立一个由你管理控制的Slack工作区。

创建一个Slack工作区

要批准Slack中的应用程序,你需要管理员的权限。如果你没有一个你是管理员的Slack工作区,你可以创建你自己的免费Slack工作区,它将给予你管理权限。进入Slack的 "开始 "页面

输入你的电子邮件地址,点击继续,或用苹果或谷歌继续。检查你的电子邮件,查看确认码。输入你的代码,然后点击创建一个工作区。通过下面的页面来命名工作区和一个频道。在这个例子中,你可以跳过邀请人。祝贺你!现在你有了一个工作区,你可以创建一个Slack Webhook。

创建一个Slack Webhook

要从外部来源向Slack发布消息,你需要一个Webhook URL。Webhooks使应用程序能够在发生新情况时相互 "交谈"。在这篇文章中,你将使用用户在Auth0登录框中输入的电子邮件地址,并将其作为一条消息发送到Slack。

首先,你需要在你的Slack工作区中有一个应用程序来发送webhook信息到你的Slack频道。进入api.slack.com,点击创建一个应用程序

Slack API homepage

这将弹出创建应用程序的模式。点击从头开始

你将看到的下一个模式是命名应用程序和选择工作区。填写一个应用程序的名称;如果你想不出更好的名字,你可以使用 "slack-test"。当你想出其他名字时,你可以随时改变这个名字。

然后选择你想连接该应用程序的工作空间。确保这是正确的应用程序,因为你以后不能改变该应用程序的工作空间。在你选择一个工作区后,点击创建应用程序

Slack Name app & create workspace modal

你将会被带到基本信息页面。这个页面是你打开使用网络钩子的能力和获得网络钩子URL的地方。在页面的左侧,点击Incoming Webhooks。点击开启的切换按钮,如果你还没有一个机器人用户,Slack会创建一个机器人用户。

Slack Activate Incoming Webhooks page

页面将刷新,并出现一个闪亮的新部分,即您工作区的Webhook URLs。要激活Webhook并创建Auth0动作中使用的URL,请滚动到页面底部,点击为工作区添加新Webhook。这个按钮是安装Slack应用程序的快捷方式,使用它意味着你不需要编写任何代码来生成Webhook URL。

Slack Add New Webhook to Workspace section

接下来的这个屏幕让你知道你的应用程序想要访问工作区。它将询问你希望应用程序发布什么频道,并给你一个下拉菜单,选择你希望应用程序发布在工作区的哪个频道。一旦你选择了频道,点击允许

Slack app permissions page

你会被带回到Incoming Webhooks页面。你现在会看到webhook URL已经被填上一个值,有你为它选择的频道和它被添加的日期。复制并保存Webhook URL到安全的地方;以后你创建一个新的Auth0动作时就会用到它。

Slack webhooks URL section

你的webhook URL包含一个秘密。不要在网上分享它,包括公共的 Git 仓库。

现在你已经为Slack创建了webhook URL,你需要前往Auth0.com,登录并创建一个Auth0 Action来发送Slack信息。

创建发布用户注册动作

Auth0行动允许你定制登录和注册等事件,以增加超出Auth0默认功能的行为。Actions有一个浏览器内的代码编辑器,你可以编写Node.js代码,这些代码在Auth0拥有和维护的基础设施上存储和运行。

通过点击Auth0仪表板左侧的Actions > Library来创建你的Action。

Auth0 Dashboard

这个页面列出了已经安装的Action,还有一个自定义选项卡用于创建Action。在右上方,点击建立自定义。你会看到 "创建动作"模式,它要求你为你的动作命名,指定你希望它何时运行,以及你希望使用哪个Node.js版本。

首先,给你的Action取个名字,比如 "Slack消息"。接下来,从触发器的下拉菜单中选择会导致Action运行的事件。在这个例子中,选择发布用户注册。将运行时间的选择设置为推荐的版本(在撰写本文时为Node 16)。最后,在填写了所有这些细节后,点击创建

Auth0 Create Action Modal

现在你会看到浏览器内的代码编辑器,在这里你可以编写代码,当你的Action被触发时就会运行。先看一下代码编辑器的四周。你会看到一个 "播放按钮 "图标,用于在部署Action之前测试它。在这下面,你会看到一个钥匙图标,用来输入秘密(如网络钩子的URL)。盒子图标是你点击的地方,可以从NPM添加模块。

在代码编辑器的上方和右边,有三个按钮。版本历史让你看到并恢复到行动的先前版本。接下来是保存草稿;如果你还没有准备好最终确定Action中的所有内容,你可以把它保存为草稿,以后再做。最后是部署,当你测试完你的Action,准备好了,就可以使用它了。

代码编辑器预先填充了适合你所写的Action类型的代码。在这种情况下,它包含onExecutePostUserRegistration 函数。在这个函数中,你将编写代码,在用户注册一个新账户后运行。

Actions Code Editor

添加webhook URL作为一个秘密

是时候使用你一直保持安全的webhook URL了!点击代码编辑器左侧的钥匙图标。这将打开侧面菜单;点击蓝色的添加秘密按钮。这将打开 "定义秘密"模式,其中有秘密的名称和它将持有的值的字段。

命名秘密 SLACK_WEBHOOK_URL在关键字段中,然后将你的Slack webhook URL粘贴到值字段中。现在点击创建

Auth0 Actions Define Secrets Modal

页面会刷新,你会看到你的秘密已经被添加到秘密菜单中。

当秘密被创建时,它们的值永远不会被透露。Auth0对所有秘密进行加密和安全存储。

添加npm包

通过Action,你可以从超过1,000,000个公共npm包中选择,并将其功能添加到你的Action中。这个动作将使用'slack-notify'npm包。这是一个围绕Slack webhook API的Node.js包装,使其能够轻松地从外部应用程序向Slack发送通知。

点击方框图标,弹出模块侧菜单,点击蓝色的添加模块按钮。在这个模式中,你添加npm包的名称和版本。输入slack-notify作为名称。这个名字必须与npm中列出的包的名字一致,所以确保你检查它的名字,以确定你提供的是正确的名字。默认情况下,版本被设置为最新的。现在点击 "创建",编写向Slack发送消息的代码的所有部分都将到位。

Auth0 Actions add module modal

编写自定义逻辑

仪表板内的代码编辑器就像你自己的编辑器一样,你知道并喜欢。你输入的代码是由Auth0托管和维护的。无论何时你想在未来对你的Action进行修改,你都可以在不触及你的代码库的情况下进行。

首先,你要在代码编辑器的顶部添加slack-notify npm包,键入 const initSlackNotify = require(slack-notify).

接下来,你会看到onExecutePostUserRegistration 函数。这个异步JavaScript函数将在一个用户被注册并保存到数据库后运行。创建一个slack 变量,并在这个函数中传递slack-notify模块和你的秘密webhook URL。

每个Action都有一个event 对象,其中有与触发器相关的信息。你将使用它来访问你先前作为秘密存储的webhook URL。代码将看起来像这样。

const slack = initSlackNotify(event.secrets.SLACK_WEBHOOK_URL)

然后,在slack 变量下面,创建一个message 变量,其中将包括要发送到Slack频道的文本。将其设置为一个模板字符串,文本为 "新用户 "和用户的电子邮件地址。event 对象有新注册用户的电子邮件地址。你可以通过将 event.user.email到模板中。

const message = `New User: ${event.user.email}`

最后,编写代码来实际发送消息。slack-notify npm包已经捆绑了3种不同的通知方法。 bug,``success,alert

  • bug
    • 用来处理错误。
  • alert
    • 用于重要事件发生时。
  • success
    • 用于消息通过时没有错误的情况下。

在这个例子中,你将使用success 方法。在success 方法中,传入一个键值为text 的对象(这是slack-notify包内置的自定义字段之一),将其值设置为message 变量。

slack.success({
    text: message
  })
};

通过这段代码,当一个新用户成功注册时,一条带有该用户电子邮件的信息将被发送到Slack。

在部署之前,你应该确保它能按预期工作。你可以在Auth0仪表板内完成这一工作,而不必离开网站。在开始测试之前,点击右上角的保存草稿

下面是该动作的完整代码。

const initSlackNotify = require('slack-notify')

exports.onExecutePostUserRegistration = async (event) => {
  const slack = initSlackNotify(event.secrets.SLACK_WEBHOOK_URL);
  const message = `New User: ${event.user.email}`

  slack.success({
    text: message
  })
};

测试该动作,然后部署它

有了Action,你可以在浏览器中直接运行测试,而不需要对你的应用程序做任何改动,也不需要对用户进行 "现场测试"。点击代码编辑器左侧的 "播放按钮 "图标。打开这个部分,你可以看到事件对象的内容,以防你想使用一些其他信息。在页面的底部,点击屏幕底部的 "运行"按钮。"测试结果 "屏幕滑动起来,命令错误栏应该是空的。

Auth0 Actions Test Results

转到你先前创建的Slack工作区,看到新的消息与测试事件对象所提供的样本电子邮件地址。

Slack test message

在一切正常的情况下,点击部署。这将记录该行动并给它一个版本号。这样,你可以继续对Action进行修改而不影响部署的版本。

现在Action已经部署好了,是时候把它添加到你的Auth0租户了,这样当有新用户注册你的网站时,你就能得到通知了

将该动作添加到发布用户注册流程中

最后要做的是把你的新动作附加到一个流程中。流程是Auth0生命周期中的不同点,从登录到将新用户保存到数据库中。当你在这些点中的一个或多个添加Action时,Action将按照它们被列出的顺序来触发。

在本教程中,你将使用 "发布用户注册"流程。在屏幕的左侧,点击**行动>**流程。这将显示所有当前可用的流程。选择 "发布用户注册",它在用户被添加到租户的用户数据库后执行。

Auth0 Actions Choose Flow page

下面的页面显示了 "行动 "拖放流程的可视化界面。在这里你可以添加一个或多个行动,这些行动将在选定的触发器之后依次运行。行动在右边;这部分有一个标签,用于从Auth0市场上安装的行动,还有一个自定义标签,用于你创建的行动。点击自定义,然后在开始完成点之间拖放你的Slack动作。

Auth0 Actions Flow visualizer

一旦完成,点击应用。现在,该行动已经准备好了,可以在黄金时间和真正的用户中使用了!

在你的Auth0租户中的任何一个网站上注册一个新用户,你应该看到该用户的电子邮件地址出现在Slack中。

你也可以使用Auth0仪表板 "入门"页面中的 "试用你的登录框 "选项。

总结

Actions为你提供了新的机会来建立真正属于你和你的应用程序的认证体验。对npm包的访问让你可以添加自定义代码并减少对你的维护。在浏览器中测试你的代码,而不需要运行本地构建,节省了你的时间。拖放式编辑器让你在不接触自己的代码库的情况下添加一个新功能,因为Actions代码是由Auth0托管的!

现在你知道如何创建一个自定义的Action,请查看Auth0文档中的Action Triggers页面,看看你还可以开发哪些其他类型的Action。


© 2013-2022 Auth0公司。保留所有权利。