document.getElementById('btnRegister').addEventListener('click', function() {
var username = document.getElementById('username').value;
var email = document.getElementById('email').value;
var password = document.getElementById('password').value;
// Em um caso real, o desafio deve ser fornecido pelo servidor
var challenge = new Uint8Array(32);
window.crypto.getRandomValues(challenge);
var publicKeyCredentialCreationOptions = {
challenge: challenge,
rp: { name: "Exemplo RP", id: location.host },
user: {
id: new TextEncoder().encode(username),
name: username,
displayName: username
},
pubKeyCredParams: [{ type: "public-key", alg: -7 }],
authenticatorSelection: { authenticatorAttachment: "platform" },
timeout: 60000,
attestation: "direct"
};
navigator.credentials.create({ publicKey: publicKeyCredentialCreationOptions })
.then(function (newCredentialInfo) {
console.log("Credencial criada:", newCredentialInfo);
var id = newCredentialInfo.id;
var attestationObject = new Uint8Array(newCredentialInfo.response.attestationObject);
var clientDataJSON = new Uint8Array(newCredentialInfo.response.clientDataJSON);
var user = {
username: username,
email: email,
password: password, // Em uma situação real, as senhas devem ser armazenadas de forma segura e não em texto simples
credId: id,
attestationObject: arrayBufferToBase64(attestationObject),
clientDataJSON: arrayBufferToBase64(clientDataJSON)
};
fetch('api/index.php/usuarios', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(user)
}).then(function (response) {
if (response.ok) {
return response.json();
} else {
throw new Error('Erro ao registrar usuário: ' + response.statusText);
}
}).then(function (data) {
showMessage( data.mensagem)
document.getElementById('username').value='';
document.getElementById('email').value='';
document.getElementById('password').value='';
//console.log('Usuário registrado com sucesso:', data);
}).catch(function (error) {
console.error('Erro:', error);
});
}).catch(function (err) {
console.error("Erro ao criar credencial:", err);
});
});
// Função para converter um ArrayBuffer para uma string base64
function arrayBufferToBase64(buffer) {
var binary = '';
var bytes = new Uint8Array(buffer);
var len = bytes.byteLength;
for (var i = 0; i < len; i++) {
binary += String.fromCharCode(bytes[i]);
}
return window.btoa(binary);
}
|