解析服务器:处理自动(匿名)用户使用代码 209 "Session token is expired."的错误



我的iOS应用程序使用Parse Server的自动用户功能,即用户不必提供登录凭据,而是自动和匿名登录。这些用户不是从 Parse.com 迁移的用户,而是具有托管 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];
在服务器上,"使非活动会话过期"为"是">

,"重置密码时撤消会话"为"是"。会话长度为 1 年(以秒为单位(。就"过期非活动会话"而言,我不完全了解什么构成"非活动"会话,以及"过期"构成的确切内容 - 从数据库中删除,或者只是使令牌无效。在我看来,无论其他因素如何,会话在开始后仅对"会话长度"仍然有效。

基于这种理解,一切都按预期工作 - 用户可以与数据库通信 - 并且在 1 年标记处,会话令牌似乎自然过期。

我注意到在解析服务器的身份验证选项卡"应用程序身份验证设置"中,"启用匿名身份验证"实际上设置为否。我的理解是,这只会让用户在没有有效会话令牌或有效 PFUser 对象的情况下与 Parse 服务器通信。 这不是我们真正想要的 - 我们想要一个有效的匿名 PFUser 进行通信,因为我们以后可能想要过渡到常规 PFUser。我尝试将其切换到 YES,但我们仍然看到相同的错误。

使用标准登录流程,人们将清楚地显示一个屏幕,允许用户登录并刷新其令牌。 但是,对于自动或匿名用户,这毫无意义 - 他们从未输入任何登录凭据,因此他们无法手动刷新其凭据。

鉴于启用了自动用户,我本以为 Parse Server 会为具有匿名凭据的用户自动生成新的会话令牌。 相反,与服务器或数据库的任何交互都会失败,并显示:

错误域 = 解析代码 = 209"会话令牌已过期。" 用户信息={代码=209,临时=0,错误=会话令牌已过期。 NSLocalizedDescription=Session 令牌已过期。}

谁能帮我解决问题?

我正在使用Parse Server v2.3.2和MongoDB v3.0.12和iOS Parse SDK v1.17.1。 我可以考虑升级到最新版本,但我想花时间先了解问题是什么,以及这是否/如何解决问题。

删除应用并重新安装可解决此问题,因为会生成新的自动用户并提供新的会话令牌。在数据库中,这显示为一个全新的用户,而旧用户永远处于未使用状态。

我想实现一个解决方案,该解决方案仅为令牌过期的匿名用户授予新的会话令牌。似乎我必须设置一个有限的会话长度,我宁愿不只是将其设置为 100 年 - 它不能解决现有用户的问题,感觉就像一个黑客。

谢谢你的帮助。

亲切问候 亚历克斯

这已被确认为 v2.8.0 或更早版本的 Parse Server 的已知问题。

临时解决方案只是更新我们的数据库,并手动将 PFSession 对象中的所有"expiresAt"字段设置为将来的某个日期。此外,我们还将服务器设置中的"会话长度"增加到 3 年,以便为新用户提供更大的缓冲区。

与此同时,正在讨论如何正确处理自动用户的令牌到期,并且可能会在 Parse Sever 的未来更新中提供解决方案。请参阅我的解析服务器 Github 问题。

相关内容

最新更新