解析 PHP 当前用户更新失败但会话已更新

Parse PHP current user update failed but session updated

In Parse PHP SDK 如果当前用户想改变他的 Email/username 正常 Parse 检查用户名是否被其他用户使用,如果使用它会 return 错误,现在这很好,到目前为止工作完美,但问题是会话会自动更新到失败的新值。

所以基本上当前用户的会话已更新,即使它不是针对后端

重现步骤

$currentUser = Parse\ParseUser::getCurrentUser();
echo "Current Username is : ". $currentUser->get("username");

if ($currentUser) {
  $currentUser->set("username", "ww");
try {
        $currentUser->save();
        echo "UPDATED";
    } catch (Parse\ParseException $er) {
        $ex = $er->getMessage();
        echo "<br> Error: ". $ex;
    }
}

这里有一段视频解释得更多:

https://youtu.be/KWS9fW5MReA

由于您在 PHP 应用程序中更新了对象,除非您重置操作,否则它将在本地保持更新。所以你可以:

  • 保存旧用户名并在您的 catch 方法中反转操作;或
  • 在你的 catch 方法中使用 $currentUser->fetch();或
  • 实例化一个新的用户对象,在这个新的对象中做改变尝试,最后$currentUser->fetch()只在成功的情况下。

请参阅以下可能的解决方案之一:

$currentUser = Parse\ParseUser::getCurrentUser();
echo "Current Username is : ". $currentUser->get("username");

if ($currentUser) {
  $currentUser->set("username", "ww");
try {
        $currentUser->save();
        echo "UPDATED";
    } catch (Parse\ParseException $er) {
        $currentUser->fetch();
        $ex = $er->getMessage();
        echo "<br> Error: ". $ex;
    }
}