Facebook graph api 设置用户';s在Facebook上的电子邮件注册Parse.com

Facebook graph api 设置用户';s在Facebook上的电子邮件注册Parse.com,facebook-graph-api,parse-platform,Facebook Graph Api,Parse Platform,我正在使用Parse.com并尝试设置用户注册Facebook 首次使用Facebook进行身份验证时,会调用beforeSave来获取其他用户详细信息: function UserBeforeSave(request, response){ var user = request.object, auth = user.get('authData'); // check if user is newly registered if (!user.existed()) {

我正在使用Parse.com并尝试设置用户注册Facebook

首次使用Facebook进行身份验证时,会调用beforeSave来获取其他用户详细信息:

function UserBeforeSave(request, response){
  var user = request.object,
      auth = user.get('authData');

  // check if user is newly registered
  if (!user.existed()) {

    // Check if a user signs up with facebook
    if (Parse.FacebookUtils.isLinked(request.object)) {

      // Query Graph API for user details
      Parse.Cloud.httpRequest({
        url:'https://graph.facebook.com/v2.2/me?access_token=' + auth.facebook.access_token,
        success:function(httpResponse){

          // Map facebook data to user object
          if (httpResponse.data.first_name) request.object.set('first_name', httpResponse.data.first_name);
          if (httpResponse.data.last_name)  request.object.set('last_name',  httpResponse.data.last_name);
          if (httpResponse.data.email)      request.object.set('email',      httpResponse.data.email);

          response.success();
        },
        error:function(httpResponse){
          console.error(httpResponse);
          response.error();
        }
      });
    } else {
      response.success();
    }
  } else {
    response.success();
  }

}
问题是,该电子邮件线路实际上中断了操作并出现错误:

Can't modify email in the before save trigger
我尝试将此代码移动到afterSave,但authdata在那里不可用,因此很难调用FBAPI。因此,该电子邮件目前为空


我假设这是将Parse与Facebook API集成的一个非常常见的用例,那么在集成过程中是否缺少自动获取电子邮件的功能?

我只是在客户端执行图形查询并在那里设置电子邮件。这个很好用


您想在用户上的before/afterSave中这样做有什么原因吗?

我认为从云代码中查询Graph API更安全,因为我可以更好地控制流程。在注册facebook之前,您如何设置用户的电子邮件?还是在身份验证后设置?在登录调用的成功块中。