解析服务器:使用代码209处理错误“会话令牌已过期”。对于自动(匿名)用户

时间:2018-05-31 12:55:27

标签: ios session parse-server error-code

我的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];

在服务器上,“Expire inactive session”为“YES”,“Resoke session on password reset”为“YES”。会话长度为1年,以秒为单位。我不完全理解“失效的非活动会话”到什么构成“非活动”会话,以及“过期”构成的确切内容 - 从数据库中删除,或者只是使令牌无效。在我看来,无论其他因素如何,会话在其开始之后仅对“会话长度”仍然有效。

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

我注意到在Parse Server的身份验证选项卡“App身份验证设置”中,“启用匿名身份验证”实际上设置为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年 - 它不能解决现有用户的问题,感觉就像一个黑客。

感谢您的帮助。

亲切的问候, 亚历

1 个答案:

答案 0 :(得分:1)

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

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

与此同时,正在讨论对自动用户的令牌到期的正确处理,并且在未来的Parse Sever更新中可能会出现解决方案。请参阅我的Parse Server Github Issue