繁体   English   中英

即使用户强行退出Ionic / Cordova应用程序,如何保持登录状态?

How to stay logged in even when user force quits the app with Ionic / Cordova?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

本机移动应用程序的一个常见功能是即使用户关闭相关应用程序也能保持登录状态(例如,参见iOS上的Facebook应用程序)。

对于通过用户名/密码对Rails后端进行身份验证的Cordova / Ionic / PhoneGap应用程序,如何实现这一目标?

我正在使用devise_token_auth gem来促进对Rails的身份验证,如果这有所不同的话。

3 个回复

我最近一直在考虑这个问题,我认为我有一个有效的解决方案。 我对Rails一无所知,但这个想法应该转移。 我只有Mongo的数据库经验所以请耐心等待。

每个设备都有一个唯一的标识符,可以使用device.uuid( 来自Cordova插件 )或getUUID()( 如果您使用的是ngCordova )在Cordova中检索。 此ID仅保证对于每个平台都是唯一的,尽管它可能在所有平台上都是唯一的,因此您应该将平台和模型添加到您的唯一标识符中以获得良好的衡量标准。

var deviceId = device.platform + device.model + device.uuid;

现在我们已经创建了一个永远不会改变的真正独特的ID,您不必处理本地存储。

现在假设您的数据库中有一个设备集合或表,它们看起来像这样,具有以下键值对。

{
    device: DEVICEID;
    loggedIn: true;
    userId: USERID;
}

现在,当应用程序启动时,从设备中获取deviceId并将其发送到您的服务器以进行搜索。 这可能与您不同,只是一个简单的键值搜索。

var result = Devices.find({device: deviceId}).fetch();

在Mongo中,这将返回一个结果数组,但应该只有一个结果。 现在我们检查他们以前是否已登录并获取userId。

var loggedIn = result[0].loggedIn;
var user = result[0].userId;

如果他们之前已注销或没有结果,请将他们带到登录页面。 如果他们已登录,请自动运行正常的登录过程。 用户id可以是指向另一个集合中的对象的指针。

这就是我认为我会这样做,或者你可以让用户对象将设备ID作为键,但是用户可以有多个设备,所以它必须是一个键数组,我不知道如何现在搜索。 添加新设备就像将唯一ID添加到集合并将其指向用户一样简单。

每次应用程序打开时,它都会检查设备ID并查看用户是否已登录设备。 发生这种情况时,您可以显示启动画面。

现在,如果用户从设置中选择退出,您可以更新数据库以反映该数据库,并且下次他们转到应用程序时,他们将被注销。

我希望我的想法可以提供帮助。

编辑:我认为每次他们退出时从集合中删除设备对象可能会更好,而不是仅仅设置loggedIn,这样如果他们摆脱了设备,它将不会保留在你的集合中。 我不确定删除对象通常会如何影响数据库的性能,但是就我所知,用户不会经常退出设备,所以它不应该是一个太大的问题。

这提出了另一个观点,即使用过的设备。 这是一个简单的补救措施,但每次用户登录现有设备时,如果新用户发生更改,请将userId键更新为新用户。

进一步编辑(因为我无法评论):在本地存储/缓存以及为什么它是危险的。 您可以在本地存储中自动自动登录某人的唯一方法是他们的帐户凭据,这是高度敏感的信息,不应该存储在本地(密码不应远程存储,但散列是一个单独的主题)。 您永远不会将其密码存储在缓存中,您可以组成一些密钥并存储它,但本地可访问的任何内容都可以被某人读取并可能在另一台设备上复制。 设备ID信息将更难伪造。

对不起,我无法评论(需要50个代表),但我认为使用localStorage是一个有效的选项。 您可以创建JSON Web令牌(JWT)并将其存储在缓存中。

在Android上,除非您通过进入“设置”明确清除应用程序的缓存,否则应用程序将保持您的用户登录(即不会终止缓存),即使您强制停止它或从多任务窗格中删除它也是如此。 我不确定它在iOS中是如何工作的。

我强烈推荐jmdobry这个惊人的Cache Wrapper

此外,有惊人的第三方库可以为您处理身份验证:

我希望这有帮助! 祝好运。

不是很安全,但你可以使用Cordova / JS友好的localStorage ..

if ( logged_in_successfully ) {
  localStorage.setItem("email", email)
  localStorage.setItem("password", password)
} 
1 如何保持用户在Ionic应用程序中的登录状态?

我正在使用Ionic Framework开发应用程序,到目前为止,我已经在Android上进行了测试,该测试程序运行良好,除了几分钟不活动后,该应用程序要求用户使用凭据重新登录。 我希望用户永远不必使用“记住我”功能重新登录? 如何进行 ? 这是我的控制器: ...

2 除非用户强行注销,否则如何保持应用程序登录

我正在学习android,并且创建了一个具有注册和登录选项的应用。 现在,我需要对其进行配置,以使用户保持登录状态,除非他注销。 我被告知要使用“共享首选项”,所以我使用了这段代码,但是它似乎没有用,几分钟后它仍然注销。 我应该添加一些东西来解决问题吗? ...

2016-06-15 09:26:28 1 55   android
3 用户登录并使用phonegap应用程序保持登录状态?

我正在使用Phonegap为我的网站构建移动应用程序,我正在使用PHP Codeigniter框架来创建我的REST API。 我需要允许用户登录到应用程序并检索信息,但我对身份验证部分感到困惑。 现在这就是我的想法: 用户使用用户名/密码登录(他们将使用HTTPS发送到服务器 ...

7 用户强行退出我的应用程序后,如何启动启动程序?

我不知道这是不可能的,直到最近我强行退出了一个应用程序,当我重新启动手机时,我发现它有一个正在后台运行的服务,并且强行退出按钮变得不可点击。 该应用程序有很多权限,其中之一是修改系统设置,这与该权限有关系吗? 什么方法使用此权限? 我该如何对我的应用程序执行相同操作? ...

2015-07-23 23:53:04 1 28   android
8 如何确保即使用户强行退出了应用程序,用户仍继续收到推送通知?

Apple的远程通知编程指南说: 在iOS设备上,如果用户使用应用程序多任务UI强制退出您的应用程序,则在用户重新启动该应用程序之前,该应用程序不会收到远程通知。 但是我可以肯定,当我强制退出Facebook,WhatsApp或Signal时,我仍然会收到有关传入消息的通知。 即使苹果 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM