Javascript 使用Auth0锁时如何管理后端用户?

Javascript 使用Auth0锁时如何管理后端用户?,javascript,node.js,reactjs,jwt,auth0,Javascript,Node.js,Reactjs,Jwt,Auth0,我正在使用React创建前端,使用Node创建后端。我想使用以下方法来管理用户信息:向API发送带有每个请求的JWT 如果我需要做以下事情之一怎么办 存储具有作者ID的博客文章 Auth0唯一标识符是用户id,它不是整数,因此不能用作id/键。在服务器端用户存储上如何处理此问题 有一个users表来存储“profile about”或其他类似信息 我是否在每个API请求上阅读JWT,确定该用户是否存在,如果不存在,则创建一个新用户,如果存在,则将其与一个预先存在的用户关联。检查每个API

我正在使用React创建前端,使用Node创建后端。我想使用以下方法来管理用户信息:向API发送带有每个请求的JWT

如果我需要做以下事情之一怎么办

  • 存储具有作者ID的博客文章
Auth0唯一标识符是
用户id
,它不是整数,因此不能用作id/键。在服务器端用户存储上如何处理此问题

  • 有一个users表来存储“profile about”或其他类似信息
我是否在每个API请求上阅读JWT,确定该用户是否存在,如果不存在,则创建一个新用户,如果存在,则将其与一个预先存在的用户关联。检查每个API请求的用户数据库是否有效

我不确定如何使用基于JWT的API和Auth0处理一般流程

编辑:

经过研究和思考,我的想法是:Auth0的唯一用户标识符由他们提供为
user\u id
。这里的问题是它不是一个整数。因此,不应将其用作数据库中
users
表的键

似乎不应该在每个请求上检查用户数据库,但这可能是错误的。一个想法是在初次登录时回调到后端,如果该帐户不存在,则创建它,如果该帐户确实存在,则继续。然后,在用户登录到前端后,只需在以下每个请求上信任Auth0 JWT(如果它在后端进行验证)

从我在网上看到的关于这个过程的极少数描述来看,我描述的方式似乎是正常的。但在某些情况下,这是没有意义的。如果用户被禁止怎么办?他们仍然可以使用活动JWT访问服务器功能,直到该功能到期

因此,如果在每个API请求上检查用户存储是正常的/性能的,那么如何将Auth0的字符串id,
user\u id
与数据存储中的整数id关联起来进行查询?我使用的是SQL变体。

如何识别用户 您不明确使用哪种数据库技术,但通常应该能够使用常规字符串作为标识符/键。您提到您正在使用SQL变体,因此这可能是问题的根源;您可能应该使用具有足够固定长度的更具体的基于文本的数据类型

user\u id
是将Auth0身份提供程序标识符与该提供程序中的用户标识符连接在一起的结果,因此我们可以认为,达到最终的最大长度有点棘手。然而,您可以决定任意的值,例如,640个字符对任何人来说都应该足够了

您还可以通过电子邮件识别您的用户;如果您的应用程序使用的每个身份验证提供商都要求用户提供其电子邮件,并且您也不打算使用相同的电子邮件地址支持不同的帐户,则这一点是可行的

最后一种选择是为每个用户分配您自己的唯一标识符,该标识符更适合您打算如何使用它。您可以通过使用此新属性创建一个,然后请求创建此属性来实现这一点

根据不同的方法,您既不需要简单的查找表将一种形式的标识符映射到内部标识符,也不需要使用内部标识符更新用户元数据,您可以完全跳过该查找表,而只跳过来自JWT的值

如何处理首次用户 正如您所提到的,您可以在每个API请求中确保,如果这是新用户发出的第一个请求,那么您可以在处理请求之前创建应用程序配置文件的概念

另一种方法是,当您检测到用户第一次注册时,在Auth0内触发此应用程序配置文件创建,然后在API上始终假定该配置文件存在

两种方法都是有效的;我会选择一个更简单的实现,并且仍然满足您的需求

如何处理被禁止的用户
如果您确实需要支持立即禁止用户并且不允许对API的任何其他请求的功能,那么您必须始终在每个API请求中进行某种查询,以查看用户是否被禁止。这就大大增加了复杂性,所以请考虑你可以容忍一个解决方案,其中令牌的生命周期更短,被禁止的用户可能仍然在短时间内调用你的API。

所以我觉得这可能是最好的选择:添加Auth0规则来给每个用户的JWT提供唯一的整数ID(仍然弄清楚如何做到这一点)。然后,在每次登录时(从前端的Auth0锁),回调到节点后端,并使用来自JWT的信息在MySQL用户表中创建/更新一个用户。根据Auth0规则创建的唯一整数ID将用作主键。这样行吗?你有什么改变或建议吗?是的,那会有用的;只有两个小注释,关于你的工作和更新用户配置文件的规则不是直接的JWT,但是它有相同的最终结果。此外,您不需要在每次登录时调用后端,您可以在第一次登录时调用后端,在后续登录时只需跳过该步骤即可。检查类似的东西。但是如果我想更新用户记录,比如说,如果他们更改了他们用来登录的Facebook帐户的电子邮件或名称,那么每次登录我都需要打电话?另外,是否有添加唯一ID的示例规则?谢谢你的帮助!在这种情况下,您是正确的,您将在每次登录时更新以保持数据同步。我不知道任何现有的添加唯一标识符的示例规则。@Connorelsea您是如何解决这个问题的?我也在同一条船上,我很惊讶在应用程序的后端没有维护用户配置文件的示例或文档。我的狗