如何在使用Auth0 Lock时管理后端用户?

Con*_*sea 12 javascript node.js jwt reactjs auth0

我正在使用React创建一个前端,并使用Node创建后端.我想使用Auth0 Lock管理用户信息- 向API发送带有每个请求的JWT.

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

  • 存储带有作者ID的博客文章

Auth0唯一标识符user_id不是整数,因此不能用作ID /密钥.我如何在服务器端用户存储上处理这个问题?

  • 有一个用户表来存储"个人资料"或其他类似信息

我是否在每个API请求上阅读JWT,确定该用户是否存在,然后创建新用户(如果不存在),或者将其与预先存在的用户相关联.在每个API请求上检查用户数据库是否有效?

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

编辑:

经过一番研究和反思后我的想法:Auth0的唯一用户标识符由他们提供user_id.这里的问题是它不是整数.因此,它不应该用作users数据库中表的键.

看起来好像你不应该在每个请求上检查用户数据库,但这可能是不正确的.一个想法是在初始登录时回调到后端,如果该帐户不存在,则创建它,如果该帐户存在,则继续.然后在用户登录前端后,在每个后续请求中信任Auth0 JWT(如果它在后端验证).

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

因此,如果在每个API请求上检查用户存储是正常/高效的,那么如何将Auth0的字符串id user_id与数据存储区中的整数ID相关联以进行查询?我正在使用SQL变体.

Joã*_*elo 7

如何识别用户

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

user_id是将Auth0身份提供者标识符与该提供者中的用户标识符连接起来的结果,因此我们可以认为达到确定的最大长度有点棘手.但是,您可以决定任意值,例如640字符对任何人都应该足够.

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

最后一种选择是为每个用户分配您自己的唯一标识符,该标识符更适合您打算如何使用它.您可以通过使用Auth0规则使用此新属性更新用户元数据,然后在通过作用域进行用户身份验证时请求将此属性包含在生成的令牌中来实现此目的.

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

如何处理首次使用的用户

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

当您第一次检测到用户注册然后在API上始终假定该配置文件存在时,替代此操作将触发从Auth0内部创建此应用程序配置文件.

两种方法都是有效的; 我会选择一个能让您更简单实现并仍能满足您要求的产品.

如何处理被禁用的用户

如果您确实需要支持立即禁止用户并且不允许对API的任何其他请求,那么您将始终必须在每个API请求中进行某种查询以查看用户是否被禁止.这会显着增加复杂性,因此请考虑您可以容忍解决方案,其中令牌的生命周期较短,禁止用户仍可在此短时间内调用您的API.