解析Javascript SDK - 将客户端`user`保存为服务器端`Parse.User.current()`

时间:2014-07-18 22:47:21

标签: facebook parse-platform

我可能在概念上做错了,所以请告诉我,如果我错了。

我正在使用Parse的Facebook登录在用户客户端登录。然后我尝试将此user object发布到我的服务器上,以便我可以在服务器端拥有该用户对象,但我在文档中找不到任何与此相关的内容。

我是否必须简单地传递user.objectId,然后重新获取该用户服务器端?或者有没有办法实际传递此用户,然后在服务器上将其设置为Parse.User.current()

2 个答案:

答案 0 :(得分:2)

所以我只需从客户端登录中获取auth' d sessionToken并将其发布到服务器端。

这是客户端Facebook登录。用户单击登录按钮时会调用fblogin。我还遗漏了基本的Parse / FB init:

function fblogin(){

    console.log("fblogin -- start");

    Parse.FacebookUtils.logIn(null, {
            success: function(user) {

                if (!user.existed()) {
                    postFBLogin(user);
                } else {

                    console.log("fblogin -- else -- user.sessionToken = " + user._sessionToken);
                    postFBLogin(user);
                }
            },
            error: function(user, error) {
                alert("User cancelled the Facebook login or did not fully authorize. Error =" + error.message);
            }
    });
}


function postFBLogin(user) {

    console.log("postFBLogin -- start -- user = " + user);
    var sessionToken = user._sessionToken;

    // Post the login
    $.ajax({
      url: '/fblogin',
      type: 'post',
      // dataType: json,
      data: {sessionToken: sessionToken},
      success: function(data) {

          console.log("post error = " + data.errorCode + data.errorMessage);

          if (data.status === 200) {
               // window.location = '/home/language';
          }

          // If an error, show the prompt
          if (data.errorCode === 101) {
              $('#login-alert').show().text("Facebook login error.");
          }

      },
      error: function(error) {
           console.log("postFBLogin -- post error = " + data.errorCode + data.errorMessage);

      }

    });
}

然后是服务器端,我使用become()类的Parse.User来获取sessionToken并将其转换为auth&dd用户服务器端:

exports.fblogin = function(req,res) {

    // var defaultLanguage = req.app.get('defaultLanguage');

    var sessionToken = req.body.sessionToken;

    Parse.User.become(sessionToken).then(function (user) {

      console.log("exports.fblogin -- become -- success");
      // The current user is now set to user.
      res.redirect('/home/language');

    }, function (error) {
      // The token could not be validated.
      console.log("exports.fblogin -- become -- error = " + error);

    });                          
}

答案 1 :(得分:0)

当您调用云功能或触发Before / AfterSave方法时,您已经有权访问该用户:

Parse.Cloud.define('myFunction', function(request, response) {
  // the current user is in:  request.user
});