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

Posted

技术标签:

【中文标题】登录时如何“记住”用户-passport.js-phonegap【英文标题】:How to 'remember' a user when he logged in -passport.js-phonegap 【发布时间】:2015-06-10 20:35:38 【问题描述】:

所以我有一个基于 Sails.js 框架的 Node.js 服务器,并且我已经成功实现了 passport.js,其方式如下:

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

(register)POST /auth/local/register:注册时返回 ID、协议、哈希密码、UserID 和 accessToken。

现在在我的 phonegap(离子框架)中,我需要保留一些数据,以便在用户每次打开应用程序时自动发出登录请求。我曾经在本地保存护照和用户名,但我知道这是一个非常系列的安全漏洞。

我应该使用更安全的本地存储吗?我应该使用吗?我应该只保存用户ID吗?请向我澄清这个问题。

【问题讨论】:

【参考方案1】:

首先,如果您不知道您应该阅读oatuh 2.0 协议文档。但我警告您,它可能非常复杂,您如何实现它取决于您。

这是 PHP 的包,但它是 wiki,它很好地总结了您可以使用 oauth 实现的四种类型的授权:

授权码授予 隐式授权 资源所有者凭据授予 客户端凭据授予

在你的情况下,我认为Resource Owner Password Credentials Grant 就足够了,但是这又取决于你。

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

【讨论】:

我正在使用这个包:npmjs.com/package/sails-generate-auth,我对此非常满意。它似乎完成了这项工作,除非有必要,否则我不想再让头痛 2 天来实现另一个库。但我没有得到如何在我的 phonegap 应用程序上保存 localStorage 数据的答案。保存用户ID(UUID)是否安全,还是我必须获得令牌并保存他。 保存令牌,令牌是你在每个请求中传递的东西,你可以在头部发送。现在在您的服务器端,您可以管理该令牌,通过管理我说您可以随时阻止它、设置权限等。即使您不想花时间实现一个新库,也可以看看oauth 流程我认为这可能会帮助您创建登录流程。每当您的用户发送他的凭据时,他都会获得一个令牌。这就是您在应用中存储的内容。 这种方法有两个问题:我使用的库将用户名和电子邮件保存在“用户”集合中,并将散列密码、协议、用户 ID、accessToken 保存在“护照”集合中。当我登录,我只获取用户数据而不是令牌...我可以使用 ID 进行另一个请求以获取令牌,但我应该这样做吗?如果我要使用令牌方法,我还必须构建一个搜索令牌用户数据的操作。保存用户 ID 不是一种安全的方法吗?它会简单得多 我为什么要实现另一个 oauth 库?我使用的那个工作得很好....我只需要知道要在phonegap客户端中保存哪些数据,以便在用户启动应用程序时“记住”他。 @MatanGubkin 保存用户 ID 根本不安全,这样我就可以生成随机数并尝试向您的 API 发出请求,直到找到有效的。有时我们必须后退一步才能前进两步。您可以使用 oAuth 2.0 以更清洁和可重用的方式实现您想要的,它是 google、facebook、twitter 等最流行的协议。迟早你将不得不使用它,所以至少试一试。

以上是关于登录时如何“记住”用户-passport.js-phonegap的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel 中执行“记住我”登录选项?

如何设置永远记住我或登录grails?

thinkphp如何实现记住用户名,密码,自动登录

如何安全实现“记住我”功能

记住我功能如何运作?

如何让浏览器永久的自动记住我登录的账号