【发布时间】:2016-09-25 15:21:31
【问题描述】:
我正在使用express 和react 编写一个单页网络应用程序。
我现在正在尝试选择对我的用户进行身份验证的方式。
我想让他们使用电子邮件和密码以及 Facebook、Google 等第三方提供商注册和登录...
我阅读了一些关于 passport 和 jwt(express-with-passport、jwt-with-passport)的文章,但没有一篇文章结合了 jwt 和第 3 方提供商。
我能想到的唯一方法是将令牌保存在我的数据库中,并对每个请求进行比较(由第 3 方提供的令牌和我自己使用 jwt 生成的令牌)
将来自提供商的令牌保存在我的数据库中并与每个请求进行比较是有意义的,但使用jwt 我只需要验证令牌而不访问数据库。
如何区分我从客户那里收到的令牌?如何判断何时访问数据库(用于提供者令牌)以及何时使用jwt 进行验证?
编辑:
我考虑的实现方式如下:
- 用户名和密码:登录后,生成一个令牌(使用jwt)并将其发送给客户端。每个请求都将包含令牌,服务器将对其进行验证。
- 第三方提供者:假设用户通过Facebook 进行身份验证。我的服务器从Facebook 接收令牌(使用passport-js)。现在我需要向客户端发送它的令牌。我可以发送我刚刚从 facebook 收到的令牌,但是我如何验证客户端在每次请求之后发送给我的令牌?
所以我可以使用jwt 再次生成一个令牌并像上面描述的那样工作。
这是一个好的实现还是我遗漏了什么?我找不到 描述所有这些方面的完整教程。
【问题讨论】:
-
尝试添加更多关于您不了解的内容的描述
标签: node.js express passport.js jwt