如何使用Auth0 Lock来pipe理后端用户?

我正在用React创build一个前端,用Node创build一个后端。 我想用Auth0 Lock来pipe理用户信息 – 发送一个包含每个请求的JWT给API。

如果我需要做以下的事情之一呢?

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

Auth0唯一标识符是user_id ,它不是一个整数,因此不能用作ID /密钥。 我将如何处理这在服务器端用户商店?

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

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

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

编辑:

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

看起来好像你不应该检查每个请求上的用户数据库,但这可能是不正确的。 一个想法是在初始login时回拨到后端,如果该账户不存在,创build它,如果该账户存在,继续前进。 然后,只要用户在前端login之后,信任Auth0 JWT(如果它在后端validation),就会在每个后续请求中相信。

从我在网上看到的这个过程的很less的描述,似乎我描述的是正常的方式。 但是在某些情况下,这是没有意义的。 如果用户被禁止呢? 他们仍然可以使用主动JWT访问服务器function,直到时间到期。

因此,如果在每个API请求上检查用户存储是正常/高效,那么如何将Auth0的stringid( user_id与数据存储中的整数ID相关联来执行查询? 我正在使用一个SQL变体。

如何识别用户

您并不清楚您使用哪种数据库技术,但通常情况下,您应该能够使用常规string作为标识符/键。 你提到你正在使用SQL变体,这可能是问题的根源; 你可能应该使用一个固定长度的更具体的基于文本的数据types。

user_id是将Auth0身份提供者标识符与该提供者中的用户标识符连接起来的结果,所以我们可以争辩说,达到一个明确的最大长度是有点棘手的。 但是,你可以决定任意值,例如,对于任何人来说,640个字符都应该是足够的。

您还可以通过电子邮件识别您的用户; 如果您的应用程序使用的每个身份validation提供程序都要求用户提供其电子邮件,而且您也不打算使用相同的电子邮件地址支持不同的账户,

最后的select是让您为每个用户分配自己的唯一标识符,这更适合您打算如何使用它。 你可以通过让Auth0规则用这个新属性更新你的用户元数据来达到这个目的,然后请求这个属性在用户authentication时通过作用域来包含在生成的令牌中 。

根据不同的方法,你不需要一个简单的查找表,把一种forms的标识符映射到你的内部标识符,或者如果你用你的内部标识符更新用户元数据,你可以完全忽略查找表,只是来自JWT的值。

如何处理初次使用者

就像你提到的那样,你可以在每个API请求中确保如果这是新用户发出的第一个请求,那么你在处理请求之前就创build了应用程序configuration文件的概念。

当您检测到用户第一次注册,然后在API上始终假定该configuration文件存在时,替代scheme是从Auth0中触发此应用程序configuration文件创build。

两种方法都是有效的。 我会去那个会让你更简单的实现,仍然符合你的要求。

如何处理被禁止的用户

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