2

I might be doing the wrong thing conceptually, so pls tell me if I'm wrong.

I'm signing in a user client-side using Parse's Facebook sign-on. I then am trying to post this user object to my server so I can have that user object server-side, but I can't find anything in the docs regarding this.

Do I have to simply pass the user.objectId and then re-fetch that user server-side? Or is there a way to actually pass this user and then set it as Parse.User.current() on the server?

2 Answers 2

2

So I just had to get the auth'd sessionToken from the client-side login and post it server-side.

Here's the client-side Facebook login. fblogin is called when user clicks the login button. I've also left out the basic 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);

      }

    });
}

And then server-side, I'm using become() of the Parse.User class to take that sessionToken and turn it into an auth'd user server-side:

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);

    });                          
}
Sign up to request clarification or add additional context in comments.

Comments

0

When you call a Cloud Function, or a Before/AfterSave method fires, you have access to the user already:

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

1 Comment

I'm not calling a cloud function right now. I signed on the user through the FB sdk, client-side, and I'm trying to access this user object server-side, but it's my own node.js server, not a Parse cloud server.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.