Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何将登录用户链接到他们的数据,在MySQL表中检索和更新他们_Node.js_Reactjs_Api_Express_User Input - Fatal编程技术网

Node.js 如何将登录用户链接到他们的数据,在MySQL表中检索和更新他们

Node.js 如何将登录用户链接到他们的数据,在MySQL表中检索和更新他们,node.js,reactjs,api,express,user-input,Node.js,Reactjs,Api,Express,User Input,这是我的网络应用程序。 我已将其简化到最低限度,以便更好地突出问题 为了验证用户身份,我使用Auth0,我想使用子声明user\u id来识别MySQL数据库中的用户,以便更新和检索用户信息。不幸的是,user\u id对于每个提供者都是不同的,例如,如果具有相同电子邮件的同一用户通过Auth0登录,他将获得一个user\u id如果他通过谷歌登录,他将获得另一个 我考虑使用电子邮件将登录用户链接到他的信息。 问题出在我的API中。更改之前是“localhost:8080/api/users/:

这是我的网络应用程序。 我已将其简化到最低限度,以便更好地突出问题

为了验证用户身份,我使用Auth0,我想使用子声明
user\u id
来识别MySQL数据库中的用户,以便更新和检索用户信息。不幸的是,
user\u id
对于每个提供者都是不同的,例如,如果具有相同电子邮件的同一用户通过Auth0登录,他将获得一个
user\u id
如果他通过谷歌登录,他将获得另一个

我考虑使用电子邮件将登录用户链接到他的信息。 问题出在我的API中。更改之前是“localhost:8080/api/users/:id” 每次创建一个新id时,无论如何都无法恢复单个用户的数据。现在我已经用“email”替换了“id”,我的API也在“localhost:8080/API/users/”中更改了:johnsmith@xxx.com".
之前:

之后: 简单地说,客户端的请求url也发生了变化


我想确保GET和PUT请求是基于已登录用户的电子邮件发出的,而不需要修改整个后端。

听起来您验证用户的方式有问题。如果有多种方法对用户进行身份验证,那么这些方法需要与用户保持一对多的关系。例如,每个用户都有一个身份验证方法列表,每当进行身份验证时,您都会检查身份验证方法表并找到它映射到的一个用户

我不确定你是自己做的,还是你正在使用的框架正在处理这个问题,但听起来你需要更改模型,以便为单个帐户允许许多身份验证方法

你也可以使用电子邮件,但这也是唯一识别用户的“老”方法现在几乎每个人都有多个活跃的电子邮件帐户,所以你也应该有一对多的用户与电子邮件的关系。如果用户的Facebook和Google帐户有不同的电子邮件帐户怎么办

请参见此处的帐户链接:


相信外部提供者对电子邮件属于谁是真实的是危险的。如果我在其中一个提供商上使用其他人的电子邮件打开一个新帐户会怎么样?然后我可以登录到您应用程序中的用户帐户,这是一个相当大的安全风险。

因此我必须使用提供商给我的用户id。我遵循链接帐户的指南。在您留下的链接中,您可以看到令牌结构,我感兴趣的是:
“identies”:[{“provider”:“google-oauth2”,“user_id”:“115015401343387192604”,“connection”:“google-oauth2”,“isSocial”:true}
如何更改代码,使其首先在我的表中查找提供者列,然后识别用户id?请检查我的沙盒文件UserInfo.js 56-86。如果您首先使用谷歌登录,然后使用Facebook登录,您将获得两个id。您需要做的是为用户提供链接,以按描述的方式连接这两个帐户ibing在文档中。因此,当用户登录到Google时,他们可以看到几个链接,也可以将该帐户连接到另一个提供商。这在您这边看起来不是问题,您只需要让用户以某种方式连接他们的两个oauth登录。似乎这只是一个链接,oauth将为您处理。