用户登录后在MEAN Stack应用中处理社交媒体集成

时间:2019-02-14 07:50:23

标签: node.js angular callback passport.js mean-stack

用户只能使用他的工作电子邮件在我的应用程序中创建一个帐户。

示例:john@xyzcompany.com

创建帐户后,他可以将多个社交媒体帐户链接到他的个人资料。

示例:john@gmail.comjohn2@gmail.com

我正在使用MEAN堆栈来开发App。

当用户登录我的应用程序时,我正在创建一个JWT令牌,以授权其将来向服务器发出的所有请求。

当涉及到社交媒体帐户集成时,在成功认证之后,我能够从这些社交媒体接收到后端回调URL的accessTokens。我需要将令牌链接到正确的用户。无论如何,因为我无法根据其社交媒体帐户中的电子邮件来识别用户,所以我可以将JWT令牌与回调URL一起传递以识别哪个用户发出了请求吗?

我能够使用socket.io解决此问题。但是我觉得没有必要使用套接字进行简单的身份验证。

还有其他解决方法吗?我在网上研究过,很少有人建议使用护照。我不完全了解护照的工作原理,我只是觉得它只是一种中间件,用于验证来自用户的API请求,无论如何我都在使用自定义功能进行此操作。

有人可以解释是否有可能使用护照策略在回调URL中传递JWT?

在MEAN Stack应用程序中处理此类身份验证的正确方法是什么?自上周以来,我一直在关注这个问题,非常期待一个好的解决方案。

2 个答案:

答案 0 :(得分:0)

我在一个大型应用程序中遇到过这种情况,我们用来处理它的方法是将jwtToken存储在redis中,然后在用户cookie的帮助下将其取回。让我更详细地解释它-

  1. 当用户打开登录页面时,为该用户发送新的Cookie。 Cookie应该包含一些唯一的ID或代码,我们将根据这些ID或代码保存JWT令牌。例如:res.cookie('jwtIdentifier', newid())
  2. 现在,当用户登录时,生成JWT令牌并将其根据cookie jwtIdentifier的值保存到您的Redis中。例如:redisHelper.set(req.cookies.jwtIdentifier, JWTTOKEN)
  3. 最后,当登录成功并将用户重定向回您的应用程序时,您可以使用cookie为对应的用户再次检索JWT令牌。例如:redisHelper.get(req.cookies.jwtIdentifier)这将带给您JWT令牌,然后您就可以在该应用程序中为该特定用户使用该JWT令牌。

希望很清楚,如果您对此实现有任何疑问,请告诉我;)

答案 1 :(得分:0)

您可以按照此处所述尝试使用客户端Facebook身份验证

https://theinfogrid.com/tech/developers/angular/facebook-login-angular-rest-api/

在这种情况下,在角度应用程序中,您的应用程序令牌旁边有Facebook令牌,您可以将它们发送到后端以标识当前用户。

在后端部分,您会打电话给facebook以从accessToken中获取个人资料数据,然后存储用户个人资料ID,并且根据您的业务,您可能还需要存储访问令牌