使用 google/facebook 护照策略登录同一帐户

Login to the same account with google/facebook passport strategies

我目前 Google 和 Facebook 使用 Passport.js 策略在我的 node.js 应用程序中登录。但是他们每个人都创建了单独的帐户,因为当前查询说:let user = await User.findOne({ facebookId: profile.id });let user = await User.findOne({ googleId: profile.id }); 分别。 我试图让它登录到同一个帐户 - 所以我想这样做的唯一选择是基于这样的电子邮件地址:let user = await User.findOne({ email: profile.emails[0].value } );.

这听起来是正确的方法吗?安全吗?还有更好的方法吗?

谢谢

这是一种常见的方式,只要电子邮件地址是由真实来源提供的,它就是安全的*。

通过添加社交登录,您接受 google 或 facebook 作为此应用程序的真实来源,因此一旦您验证了令牌签名,如果您从令牌本身提取电子邮件,或者如果您从社交提供商处获取信息,通常的做法是使用电子邮件地址将其关联起来。

请注意,一旦使用电子邮件地址“连接”了帐户。如果用户更改电子邮件(在您的应用程序中或在提供商的帐户中),连接将中断。 一些 web/apps 通知用户。

*一旦您接受您的提供商是真实来源这一事实,它就是安全的。