直接从文档中说:
PFUser#currentUser() 从磁盘获取当前登录的用户,并 返回它的实例。
这很好,但是如果登录@磁盘的用户不是登录服务器的用户怎么办。假设用户帐户因任何原因被删除,或者由于数据库修改而会话不再有效。这些是我目前面临的问题。
在我读过的教程中,我已经看到使用以下代码行来检查用户是否有效,因此您可以跳过应用程序的登录阶段:
if let user = PFUser.currentUser() as? Subclass {
// Simulate successful login
}
但是,这给我带来了一个问题,因为模拟了成功登录,但登录不成功。这是我正在处理的错误:
[错误]:会话令牌无效(代码:209,版本:1.12.0)
所以我做的第一件事是尝试注销用户,但是这失败了(我假设是因为用户一开始没有登录),现在我被扔进了应用程序,该应用程序立即崩溃,因为服务器所需的数据不存在。 以下是我尝试处理错误代码 209 的方法:
let query = PFQuery(className: "Foo")
query.whereKey("Bar", equalTo: "Foo")
query.findObjectsInBackgroundWithBlock {
(foo, error) -> Void in
if let error = error {
print(error);
if error.code == 209 {
PFUser.logOutInBackgroundWithBlock {
(error) -> Void in
if let error = error {
print("Okay, I'm trapped!");
}
}
}
}
}
此"查询"的输出如下:
[Error]: invalid session token (Code: 209, Version: 1.12.0)
Okay, I'm trapped!
我在这里没有想法,我正在扯头发,试图弄清楚如何在应用程序启动时正确验证用户。必须在每个查询上捕获错误代码 209 似乎是多余的,但如果这是您必须做的,那么这就是您必须做的。
您可以使用同步注销。所以即使发生错误,也没关系。如果用户再次启动应用,PFUser 会话令牌将失效。
此外,最新的 Parse SDK 提供了 PFConstants 类,该类为所有可能的错误情况提供枚举。
kPFErrorInvalidSessionToken = 209.
if (error.code == kPFErrorInvalidSessionToken) {
PFUser.logOut()
//Necessary pop of view controllers after executing the previous code.
}