使用 Auth0 Lock 时如何在后端管理用户?
How to manage users on backend when using Auth0 Lock?
我正在用 React 创建一个前端,用 Node 创建一个后端。我想使用 Auth0 Lock 管理用户信息 - 将 JWT 与每个请求一起发送到 API.
如果我需要做以下事情之一怎么办?
- 使用作者 ID
存储博客 post
Auth0 唯一标识符是 user_id
,它不是整数,因此不能用作 ID/key。我将如何在服务器端用户存储中处理此问题?
- 有用户table存储"profile about"或其他类似信息
我是否在每个 API 请求中读取 JWT,确定该用户是否存在,如果不存在则创建一个新用户,或者如果存在则将其与预先存在的用户相关联。在每个 API 请求上检查用户数据库是否高效?
我不确定如何使用基于 JWT 的 API 和 Auth0 处理一般流程。
编辑:
我经过一些研究和反思后的想法:Auth0 的唯一用户标识符由他们提供为 user_id
。这里的问题是它不是整数。因此,不应将其用作数据库中 users
table 的键。
您似乎不应该在每次请求时都检查用户数据库,但这可能是不正确的。一种想法是在初始登录时回调到后端,如果该帐户不存在,则创建它,如果该帐户确实存在,则继续。然后在用户登录前端后,在每个后续请求中信任 Auth0 JWT(如果它在后端进行验证)。
从我在网上看到的关于这个过程的极少数描述来看,我描述的方式似乎是正常的方式。但是在某些情况下它没有意义。如果要禁止用户怎么办?他们仍然可以使用他们的活动 JWT 访问服务器功能,直到它因时间过期。
因此,如果 normal/performant 在每个 API 请求中检查用户存储,我如何将 Auth0 的字符串 ID user_id
与数据存储中的整数 ID 相关联做查询?我正在使用 SQL 变体。
如何识别用户
您没有明确说明您使用的是哪种数据库技术,但通常您应该能够使用常规字符串作为 identifiers/keys。您确实提到您正在使用 SQL 变体,因此这可能是问题的根源;您可能应该使用具有足够固定长度的更具体的基于文本的数据类型。
user_id
是将 Auth0 身份提供者标识符与该提供者内的用户标识符连接起来的结果,因此我们可以说达到确定的最大长度有点棘手。但是,您可以决定任意值,例如,640 个字符应该对任何人都足够了。
您还可以通过电子邮件识别您的用户;如果您的应用程序使用的每个身份验证提供程序都要求用户提供他们的电子邮件,并且您也不打算支持具有相同电子邮件地址的不同帐户,则此方法有效。
最后一个选择是为每个用户分配您自己的唯一标识符,该标识符更适合您打算如何使用它。您可以通过 Auth0 rule update your user metadata with this new attribute and then request this attribute to be included in the generated token upon user authentication by the means of scopes.
来实现此目的
根据方法,您不需要简单的查找 table 将一种形式的标识符映射到您的内部标识符,或者在您使用内部标识符更新用户元数据的情况下,您可以跳过该查找 table 完全且仅来自 JWT 的价值。
如何处理新用户
正如您提到的,您可以在每个 API 请求中确保如果这是新用户发出的第一个请求,那么您在处理请求之前创建应用程序配置文件的概念。
替代方法是在您检测到用户首次注册时从 Auth0 中触发此应用程序配置文件创建,然后在 API 上始终假定该配置文件存在。
两种方法都有效;我会选择一个可以让您实现更简单但仍能满足您要求的方案。
如何处理被封禁的用户
如果您确实需要支持立即禁止用户的能力并且不允许对 API 的任何其他请求,那么您总是必须在每个 API 请求查看用户是否被禁止。这会显着增加复杂性,因此请考虑您可以容忍令牌生命周期较短的解决方案,并且被禁止的用户仍可能在短时间内致电您的 API。
我正在用 React 创建一个前端,用 Node 创建一个后端。我想使用 Auth0 Lock 管理用户信息 - 将 JWT 与每个请求一起发送到 API.
如果我需要做以下事情之一怎么办?
- 使用作者 ID 存储博客 post
Auth0 唯一标识符是 user_id
,它不是整数,因此不能用作 ID/key。我将如何在服务器端用户存储中处理此问题?
- 有用户table存储"profile about"或其他类似信息
我是否在每个 API 请求中读取 JWT,确定该用户是否存在,如果不存在则创建一个新用户,或者如果存在则将其与预先存在的用户相关联。在每个 API 请求上检查用户数据库是否高效?
我不确定如何使用基于 JWT 的 API 和 Auth0 处理一般流程。
编辑:
我经过一些研究和反思后的想法:Auth0 的唯一用户标识符由他们提供为 user_id
。这里的问题是它不是整数。因此,不应将其用作数据库中 users
table 的键。
您似乎不应该在每次请求时都检查用户数据库,但这可能是不正确的。一种想法是在初始登录时回调到后端,如果该帐户不存在,则创建它,如果该帐户确实存在,则继续。然后在用户登录前端后,在每个后续请求中信任 Auth0 JWT(如果它在后端进行验证)。
从我在网上看到的关于这个过程的极少数描述来看,我描述的方式似乎是正常的方式。但是在某些情况下它没有意义。如果要禁止用户怎么办?他们仍然可以使用他们的活动 JWT 访问服务器功能,直到它因时间过期。
因此,如果 normal/performant 在每个 API 请求中检查用户存储,我如何将 Auth0 的字符串 ID user_id
与数据存储中的整数 ID 相关联做查询?我正在使用 SQL 变体。
如何识别用户
您没有明确说明您使用的是哪种数据库技术,但通常您应该能够使用常规字符串作为 identifiers/keys。您确实提到您正在使用 SQL 变体,因此这可能是问题的根源;您可能应该使用具有足够固定长度的更具体的基于文本的数据类型。
user_id
是将 Auth0 身份提供者标识符与该提供者内的用户标识符连接起来的结果,因此我们可以说达到确定的最大长度有点棘手。但是,您可以决定任意值,例如,640 个字符应该对任何人都足够了。
您还可以通过电子邮件识别您的用户;如果您的应用程序使用的每个身份验证提供程序都要求用户提供他们的电子邮件,并且您也不打算支持具有相同电子邮件地址的不同帐户,则此方法有效。
最后一个选择是为每个用户分配您自己的唯一标识符,该标识符更适合您打算如何使用它。您可以通过 Auth0 rule update your user metadata with this new attribute and then request this attribute to be included in the generated token upon user authentication by the means of scopes.
来实现此目的根据方法,您不需要简单的查找 table 将一种形式的标识符映射到您的内部标识符,或者在您使用内部标识符更新用户元数据的情况下,您可以跳过该查找 table 完全且仅来自 JWT 的价值。
如何处理新用户
正如您提到的,您可以在每个 API 请求中确保如果这是新用户发出的第一个请求,那么您在处理请求之前创建应用程序配置文件的概念。
替代方法是在您检测到用户首次注册时从 Auth0 中触发此应用程序配置文件创建,然后在 API 上始终假定该配置文件存在。
两种方法都有效;我会选择一个可以让您实现更简单但仍能满足您要求的方案。
如何处理被封禁的用户
如果您确实需要支持立即禁止用户的能力并且不允许对 API 的任何其他请求,那么您总是必须在每个 API 请求查看用户是否被禁止。这会显着增加复杂性,因此请考虑您可以容忍令牌生命周期较短的解决方案,并且被禁止的用户仍可能在短时间内致电您的 API。