如何配置PostgreSQL作为Auth0自定义数据库

485 阅读7分钟

你可以使用Auth0来创建和维护你自己的用户存储,同时也在上面提供一个安全的认证系统。Auth0让你在你自己的数据库中存储用户。此外,Auth0使用OAuth 2.0作为授权框架,在安全方面你可以放心。在Auth0中使用自定义数据库作为用户存储,有利于用户迁移,并为你现有的用户数据库增加一个OAuth和OpenID连接层。你可以配置任何数据库或网络服务,包括ASP.NET成员资格提供者、MongoDB、MySQL、PostgreSQL,作为Auth0的自定义数据库。在这篇文章中,你将学习如何将PostgreSQL设置为Auth0的自定义数据库。

有限的访问:有些功能是可用的,取决于你的Auth0订阅。欲了解更多信息,请参阅Auth0定价计划

启用自定义数据库

还没有一个Auth0账户吗?现在就免费注册吧

登录后,导航到数据库连接页面(Auth0仪表板 > 认证 > 数据库)。点击创建数据库连接按钮,给你的数据库起个好名字,然后点击创建按钮。转到自定义数据库选项卡,启用使用我自己的数据库来配置自定义数据库。

Enabling 'use my own database' on custom database tab of Auth0 interface

Auth0使用Node.js脚本,称为Action Scripts,用于连接和访问你的数据库。这些脚本包括JavaScript函数,允许你执行各种任务,如添加一个新用户,登录一个用户,等等。你应该定义自定义数据库动作脚本来执行以下动作。

  • 创建。创建脚本在你的PostgreSQL数据库中插入一个新的用户,emailpassword
  • 登录。每当有用户需要认证时,登录脚本就会在你的PostgreSQL数据库中验证用户的身份。
  • 验证:验证脚本在你的数据库中更新用户的电子邮件地址的验证状态。
  • 修改密码:修改密码脚本修改用户的电子邮件地址的密码。它改变了用户在数据库中的密码,以便将来登录(忘记密码功能)。
  • 获取用户:获取用户脚本从你的数据库中检索一个指定的用户信息。它返回 undefined如果该用户不在你的数据库中。
  • 删除。删除脚本将指定的用户身份从你的数据库中删除。

幸运的是,Auth0提供了这些自定义数据库脚本的模板。你可以使用该模板,并用你的数据库URL来更新连接字符串。关于Auth0自定义数据库动作脚本的其他信息,请参考官方文档。让我们先创建一个PostgreSQL数据库来与Auth0连接。

设置一个PostgreSQL数据库

你不能在你的本地环境中使用该数据库。你应该让你的数据库通过互联网访问,或者使用像Database as A Service这样的工具。在本教程中,我将使用ElephantSQL,它可以在几分钟内提供一个完全配置好的、云托管的PostgreSQL数据库。然而,它并不显示数据库内的任何数据;相反,你可以运行SQL命令来显示你的数据。你可以设计你自己的数据库,并将其托管在任何云供应商,如AWS谷歌云Heroku

Elephant sql home page

前往www.elephantsql.com/,为自己创建一个账户,如果你已经有一个账户,则登录。它将带你到仪表板页面;点击创建新实例来创建一个新的数据库实例。给你的数据库实例取一个合适的名字,并选择一个计划和一个地区。我将使用免费计划进行演示。配置数据库以满足你的要求,然后点击创建实例

Elephantsql create instance confirmation page

如果你在创建实例时遇到任何错误,请参考ElephantSQL文档进行故障排除。

现在,导航到新创建的数据库实例,并从详细信息页面复制URL。你将需要它来连接你的Auth0应用程序到这个数据库。任何人都可以用这个连接字符串访问你的数据库。为了安全起见,如果你能把它保持得非常秘密,会有帮助。

Click on show button and copy the 'URL' on the ElephantSQL instance details page

PS:如果你使用防火墙,Auth0提供了几个IP地址来配置你的数据库网络连接。你可以在action scripts下找到它们。

List of IP addresses under action scripts

**注意:**使用你自己的数据库会导致一些安全问题。允许你的数据库在没有任何防火墙或安全措施的情况下通过互联网访问,可能会导致数据泄露。

创建一个存储用户的表

切换到浏览器标签,执行以下命令。

CREATE TABLE users(
    id UUID DEFAULT uuid_generate_v4(),
    nickname VARCHAR(255),
    email VARCHAR(255) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL,
    email_Verified BOOLEAN DEFAULT FALSE
);

creating a new table using SQL command in SQL Browser

上述命令创建了一个名为users 的新表,用于存储Auth0的用户信息。你至少需要上述五列来保存和验证用户身份。

定义Auth0自定义数据库的脚本

在Auth0界面中打开自定义数据库标签,浏览到数据库动作脚本部分。选择一个脚本(比如Login)进行编辑,并从模板的下拉菜单中选择PostgreSQL。为了将你的数据库连接到Auth0,你应该在动作脚本中添加你的数据库的连接字符串(conString)。

向下滚动一点到动作脚本部分下的数据库设置。添加你从ElephantSQL复制的数据库URL作为环境变量(将其作为一个秘密)。

Adding the database URL as an env variable 'POSTGRES_URL' settings section

现在,用这个值更新你的动作脚本中的conString

- const conString = 'postgres://user:pass@localhost/mydb';
+ const conString = configuration.POSTGRES_URL;

记得在每个数据库动作脚本中添加连接字符串,这就是全部了现在你可以点击 "保存并尝试"按钮来测试你的数据库。

注意:你也可以将一个现有的用户数据库链接到Auth0。你应该修改动作脚本中的一些代码来匹配你的数据库配置。

测试数据库

首先,尝试使用创建脚本在数据库中创建一个用户。

user created successfully after trying the custom create script

你可以在数据库中找到该用户。在ElephantSQL中打开SQL浏览器,运行以下命令。它从数据库中检索出包含用户信息的前100条记录。

SELECT * FROM "public"."users" LIMIT 100

database rows will be displayed on the browser tab after executing the above command

同样的,登录,验证你的电子邮件,然后删除用户。对于删除一个用户,你应该使用特定用户的唯一ID。测试所有的脚本,在你在Auth0仪表板上创建的应用程序中使用这个数据库。你可以在你的应用程序的连接选项卡上选择使用这个数据库。如果你在整个过程中遇到任何问题,请向Auth0社区寻求帮助。

总结

在这篇文章中,你学到了如何将你的PostgreSQL数据库设置为Auth0自定义数据库。即使你有一个不同类型的数据库,你也可以使用提供的模板轻松地连接到Auth0。在本教程中,你只是改变了Auth0的模板。如果你需要保留更多的用户信息,或者想把已经存在的用户商店配置为Auth0自定义数据库,请相应地修改动作脚本。

使用自定义数据库会引入一些安全问题,以及额外的配置工作。你应该把你的数据库放在一个安全的云端,以防止数据泄漏。如果你不想投入任何额外的努力,你可以依靠Auth0。它将你的用户信息保存在非常安全的数据库中(见Auth0如何存储数据?)