解析,如何处理无效会话?

时间:2016-01-16 23:39:36

标签: ios parse-platform

直接来自文档,它说:

  

PFUser#currentUser()从磁盘获取当前登录的用户   返回它的一个实例。

这很好,但是如果登录@ disk的用户不是在服务器上登录的用户,那该怎么办呢?假设用户帐户因任何原因已被删除,或者由于数据库修改,会话不再有效。这些是我目前面临的问题。

在我读过的教程中,我已经看到使用以下代码行来检查用户是否有效,因此您可以跳过应用程序的登录阶段:

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似乎是多余的,但如果这是你必须要做的,那么这就是你必须要做的。

1 个答案:

答案 0 :(得分:0)

您可以使用同步注销。因此,即使发生错误,也无所谓。如果用户再次启动应用程序,PFUser会话令牌将失效。

最新的Parse SDK还提供PFConstants类,它为所有可能的错误情况提供枚举。

kPFErrorInvalidSessionToken = 209.

if (error.code == kPFErrorInvalidSessionToken) {
    PFUser.logOut()
    //Necessary pop of view controllers after executing the previous code.
}