ios - 解析服务器:使用代码 209“会话令牌已过期”处理错误。对于自动(匿名)用户
问题描述
我的 iOS 应用程序使用 Parse Server 的自动用户功能,即用户不必提供登录凭据,而是自动匿名登录。这些不是从 Parse.com 迁移的用户,而是由托管 Parse 服务器生成的具有可撤销会话的自动用户。
我们的客户端 Parse 初始化如下所示:
[Parse initializeWithConfiguration:[ParseClientConfiguration configurationWithBlock:^(id<ParseMutableClientConfiguration> _Nonnull configuration) {
configuration.applicationId = <our app id>;
configuration.clientKey = <our client key>;
configuration.server = <our server>; }]];
// Users
[PFUser enableRevocableSessionInBackground];
[PFUser enableAutomaticUser];
[PFACL setDefaultACL:[PFACL ACL] withAccessForCurrentUser:YES];
在服务器上,“Expire inactive session”为 YES,“Revoke session on password reset”为 YES。会话长度为 1 年,以秒为单位。就“过期非活动会话”而言,我不完全理解“非活动”会话的构成,以及“过期”的确切构成 - 从数据库中删除,或者只是使令牌无效。在我看来,无论其他因素如何,会话在其开始后仅对“会话长度”有效。
基于这种理解,一切都按预期工作 - 用户可以与数据库通信 - 并且在 1 年标记时,会话令牌似乎自然到期。
我注意到在 Parse Server 的身份验证选项卡“应用程序身份验证设置”中,“启用匿名身份验证”实际上设置为 NO。我的理解是,这只会让用户在没有有效会话令牌或有效 PFUser 对象的情况下与 Parse 服务器进行通信。这并不是我们真正想要的——我们想要一个有效的匿名 PFUser 进行通信,因为我们稍后可能想要转换为一个普通的 PFUser。我尝试将其切换为 YES,但我们仍然看到相同的错误。
使用标准登录流程,您会清楚地显示一个屏幕,允许用户登录并刷新他们的令牌。但是,对于自动或匿名用户来说,这是没有意义的——他们从未输入任何登录凭据,因此他们无法手动刷新他们的凭据。
鉴于启用了自动用户,我希望 Parse Server 会自动为具有匿名凭据的用户生成一个新的会话令牌。相反,与服务器或数据库的任何交互都失败了:
错误域=解析代码=209“会话令牌已过期。” UserInfo={code=209,temporary=0,error=会话令牌已过期。NSLocalizedDescription=会话令牌已过期。}
任何人都可以帮我解决问题吗?
我将 Parse Server v2.3.2 与 MongoDB v3.0.12 和 iOS Parse SDK v1.17.1 一起使用。我可以考虑升级到最新版本,但我想先花时间了解问题所在,以及这是否/如何解决问题。
删除应用程序并重新安装它可以解决问题,因为会生成新的自动用户并提供新的会话令牌。在数据库中,这显示为一个全新的用户,而旧用户将永远闲置。
我想实现一个解决方案,只需为具有过期令牌的匿名用户授予新的会话令牌。似乎我必须设置一个有限的会话长度,而且我宁愿不只是将其设置为 100 年——它不能解决现有用户的问题,而且感觉就像一个 hack。
谢谢您的帮助。
亲切的问候,亚历克斯
解决方案
这已被确认为 Parse Server v2.8.0 或更早版本的一个已知问题。
临时解决方案是简单地更新我们的数据库并手动将 PFSession 对象中的所有“expiresAt”字段设置为将来的日期。此外,我们将服务器设置中的“会话长度”增加到 3 年,以便为新用户提供更大的缓冲。
与此同时,正在讨论如何正确处理自动用户的令牌到期问题,并且可能会在 Parse Sever 的未来更新中提供解决方案。请参阅我的Parse Server Github 问题。
推荐阅读
- kubernetes - 如何保持 kubernetes pod 的状态相同或自动恢复
- bash - 从另一个文件 sh 赋值
- javascript - 电子:按住元键的同时拖动范围控制
- .net-core - dotnet blazor Web 程序集模板 - 它在哪里?
- react-native - React Native Firebase - 即使我已经更新了 Firebase 模块的版本,我仍然遇到版本不匹配错误
- python - 从(x,y)坐标列表中如何找到角度变化的点?
- python - 注册和登录 api 中的 Django 休息框架
- arrays - 如何将十六进制值的字符串数组转换为vb.net中的字节数组
- c# - 如何将动态对象序列化为 dotnet core 中的 JSON 字符串?
- python - 如何从python中的大数据文件中读取某些行?