如何在用户登录后“记住”用户 - passport.js - phonegap

3

我有一个基于Sails.js框架的Node.js服务器,并且已经成功地使用passport.js实现了以下功能:

(登录)POST /auth/local:如果验证通过,返回ID、用户名和电子邮件地址。

(注册)POST /auth/local/register:注册成功后返回ID、协议、哈希密码、用户ID和访问令牌。

现在,在我的phonegap(ionic框架)中,我需要保存一些数据,以便每次用户打开应用程序时都可以自动进行登录请求。我曾经将护照和用户名保存在本地,但我意识到这是一个非常严重的安全漏洞。

我应该使用更安全的localStorage吗?我是否应该使用它?我只需保存userID吗?请为我解决这个问题。

1个回答

1

首先,如果您不知道,应该阅读 oatuh 2.0 协议文档。但是我要提醒您,它可能非常复杂,如何实施由您决定。

这是一个针对PHP的软件包,但在它的wiki中,它很好地总结了四种oauth授权类型:

  • 授权码授权
  • 隐式授权
  • 资源拥有者凭据授权
  • 客户端凭据授权

在您的情况下,我认为 资源所有者密码凭证授权 就足够了,但再次强调,如何实施由您决定。

我找到了这两个npm包,也许可以帮助你node-oauth20-providerSails-OAuth2-API


我正在使用这个包:https://www.npmjs.com/package/sails-generate-auth,我对它感到非常满意。它似乎能够胜任工作,我不想再花费另外两天的时间去实现另一个库,除非有必要。但是我没有得到如何在我的phonegap应用程序中保存localStorage数据的答案。保存用户ID(UUID)是否安全,还是必须获取令牌并保存它? - Matan Gubkin
保存令牌,令牌是您在每个请求中传递的内容,您可以将其发送到标头。现在,在服务器端,您可以管理该令牌,通过管理我是说您可以随时阻止它,设置权限等。即使您不想花时间实现新库,请查看OAuth流程,我认为这可能有助于创建登录流程。每当用户发送凭据时,他都会获得一个令牌。这就是您在应用程序中存储的内容。 - Fabio Antunes
我对这种方法有两个问题:我使用的库将用户名和电子邮件保存在“用户”集合中,将哈希密码、协议、用户ID和访问令牌保存在“护照”集合中。当我登录时,我只能获取用户数据而不是令牌...我可以使用ID进行另一个请求以获取令牌,但我应该这样做吗?如果我选择令牌方法,我还需要构建一个操作来搜索令牌的用户数据。保存用户ID是否不安全?这将简单得多。 - Matan Gubkin
好的,我成功地将用户注册时创建的accessToken存储在localStorage中,当用户登录时。这意味着从现在开始,在每个请求中,我都会将令牌作为参数传递,并将其与后端的用户令牌进行比较,对吗?虽然我现在正在使用令牌,但它们只是访问令牌。我根本不使用刷新令牌。它们真的必要吗?如果令牌被盗,我可以构建一个页面来创建新的令牌。 - Matan Gubkin
这取决于您以及您希望应用程序有多安全。如果您的应用程序足够大,拥有许多用户和敏感数据,那么您确实需要考虑到API密钥的过期和刷新。尽管您可能不需要,但我建议您为Cordova应用程序做好准备。我的意思是,在您的Cordova应用程序中,每当您发出API请求并收到403响应时,这意味着您的用户应该重新登录。 - Fabio Antunes
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接