Search code examples
swiftmacossessionparse-platform

Swift OSX - Parse.com - Save new user without changing


I am trying to add new users on my database using Parse. I can't save the new user directly without calling the sign up method, but after signing up the user changes to the user that was signed up and I want to keep the same user that was using the software before.

I found on this link here in StackOverflow that I need to save the previews session and after the new user sign up process I can call the method become to recover the user that was being used before using the saved session, but it is returning me an error: [Error]: invalid session token (Code: 209, Version: 1.15.3). Here is the code:

Usuario.swift

import Foundation

import Parse

class Usuario: PFUser {

    @NSManaged var nome: String?
}

The action to save the new user

@IBAction func adicionarGerenciadorButtonClicked(_ sender: NSButton) {

    let gerenciador = Usuario()

    gerenciador.nome = nomeGerenciadorTextField.stringValue
    gerenciador.username = emailGerenciadorTextField.stringValue
    gerenciador.email = emailGerenciadorTextField.stringValue
    gerenciador.password = senhaGerenciadorSecureTextField.stringValue

    let gerenciadorTokenAtual = Usuario.current()!.sessionToken
    print(gerenciadorTokenAtual)

    gerenciador.signUpInBackground(block: {
            (success, error) -> Void in

            do {
                try Usuario.become(gerenciadorTokenAtual!)
            } catch {

            }

            if error == nil {
                self.gerenciadores.append(gerenciador)

                self.nomeGerenciadorTextField.stringValue = ""
                self.emailGerenciadorTextField.stringValue = ""
                self.senhaGerenciadorSecureTextField.stringValue = ""
            } else {
                self.mostrarErro(mensagem: "Erro", informativo: "Houve um erro ao tentar salvar o gerenciador")
            }
        })
    }
}

Solution

  • I created a 'Parse Cloud' method that allows me use the 'Master Key'

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