在不重置当前用户会话的情况下创建新用户

Creating new users without resetting current user session

在我的 Parse 网络应用程序中,我有一个管理员可以访问的用户管理页面。此页面允许管理员创建新的用户帐户。

要创建帐户,我使用 Parse.User.signUp()

效果很好,但它有重置当前用户会话的令人讨厌的副作用,这会注销创建新用户帐户的管理员。

这实际上是 User.signUp()documented 行为:

This will create a new Parse.User on the server, and also persist the session in localStorage so that you can access the user using #current.

但我想在不更改当前用户的情况下创建新用户。我该怎么做?

在使用 User.signUp 创建新用户帐户之前,保存当前用户的 sessionToken。然后,一旦创建了新用户,使用 User.become:

恢复会话
var sessionToken = Parse.User.current().getSessionToken();

Parse.User.signUp(username, password).then(function(newUser) {
    Parse.User.become(sessionToken);
});

我可以创建一个 'Parse Cloud' 方法,允许您使用 'Master Key' 并使用云从 SDK 调用它。

Parse.Cloud.define('salvarUsuario', function(request, response) {

  var nomeCompleto = request.params.nomeCompleto;
  var Email = request.params.Email;
  var Username = request.params.Username;
  var cpf = request.params.cpf;
  var Password = request.params.Password;
  var funcionarioBool = request.params.funcionarioBool;
  var ativo = request.params.ativo;
  var primeiroAcesso = request.params.primeiroAcesso;
  var tipoAcesso = request.params.tipoAcesso;
  var medicoBool = request.params.medicoBool;

  //Parâmetros de controle
  var fotoSelecionada = request.params.fotoSelecionada;

  var usuario = new Parse.User();

  usuario.set("nomeCompleto", nomeCompleto);
  usuario.set("email", Email);
  usuario.set("username", Username);
  usuario.set("cpf", cpf);
  usuario.set("password", Password);
  usuario.set("funcionarioBool", funcionarioBool);
  usuario.set("ativo", ativo);
  usuario.set("primeiroAcesso", primeiroAcesso);
  usuario.set("tipoAcesso", tipoAcesso);
  usuario.set("medicoBool", medicoBool);

  if(medicoBool) {
    var medicoId = request.params.medico;
    var Medico = Parse.Object.extend("Medico");
    var medicoPointer = Medico.createWithoutData(medicoId);
    usuario.set("medico", medicoPointer);
  }

  if(fotoSelecionada) {
    var bytes = request.params.bytesFoto;
    var file = new Parse.File("foto.png", bytes, "image/png");

    usuario.set("foto", file);
  }

  usuario.save(null, {
      useMasterKey: true,
      success: function(salvoUsuario){
          // The user was saved correctly
          response.success("1");

      },
      error: function(error){
          response.error("Erro ao criar novo usuário");
      }
  });
});