¿Cómo obtener contraseña de entrada usando node.js? Lo que significa que no debe ingresar la contraseña ingresada en la consola.Obtener contraseña de entrada utilizando node.js
Respuesta
actualización 2015 Dic 13: readline
ha sustituido process.stdin
y node_stdio was removed from Node 0.5.10.
var BACKSPACE = String.fromCharCode(127);
// Probably should use readline
// https://nodejs.org/api/readline.html
function getPassword(prompt, callback) {
if (prompt) {
process.stdout.write(prompt);
}
var stdin = process.stdin;
stdin.resume();
stdin.setRawMode(true);
stdin.resume();
stdin.setEncoding('utf8');
var password = '';
stdin.on('data', function (ch) {
ch = ch.toString('utf8');
switch (ch) {
case "\n":
case "\r":
case "\u0004":
// They've finished typing their password
process.stdout.write('\n');
stdin.setRawMode(false);
stdin.pause();
callback(false, password);
break;
case "\u0003":
// Ctrl-C
callback(true);
break;
case BACKSPACE:
password = password.slice(0, password.length - 1);
process.stdout.clearLine();
process.stdout.cursorTo(0);
process.stdout.write(prompt);
process.stdout.write(password.split('').map(function() {
return '*';
}).join(''));
break;
default:
// More passsword characters
process.stdout.write('*');
password += ch;
break;
}
});
}
getPassword('Password: ');
Para ello he encontrado este excelente Google Group post
que contiene el siguiente fragmento:
var stdin = process.openStdin()
, stdio = process.binding("stdio")
stdio.setRawMode()
var password = ""
stdin.on("data", function (c) {
c = c + ""
switch (c) {
case "\n": case "\r": case "\u0004":
stdio.setRawMode(false)
console.log("you entered: "+password)
stdin.pause()
break
case "\u0003":
process.exit()
break
default:
password += c
break
}
})
Nota process.binding ("stdio") ya no funciona en las versiones actuales de nodo – mikemaccana
aquí está mi versión modificada de la clavadora de desde arriba, actualizado para obtener una devolución de llamada y para el nodo 0.8 Uso:
/**
* Get a password from stdin.
*
* Adapted from <http://stackoverflow.com/a/10357818/122384>.
*
* @param prompt {String} Optional prompt. Default 'Password: '.
* @param callback {Function} `function (cancelled, password)` where
* `cancelled` is true if the user aborted (Ctrl+C).
*
* Limitations: Not sure if backspace is handled properly.
*/
function getPassword(prompt, callback) {
if (callback === undefined) {
callback = prompt;
prompt = undefined;
}
if (prompt === undefined) {
prompt = 'Password: ';
}
if (prompt) {
process.stdout.write(prompt);
}
var stdin = process.stdin;
stdin.resume();
stdin.setRawMode(true);
stdin.resume();
stdin.setEncoding('utf8');
var password = '';
stdin.on('data', function (ch) {
ch = ch + "";
switch (ch) {
case "\n":
case "\r":
case "\u0004":
// They've finished typing their password
process.stdout.write('\n');
stdin.setRawMode(false);
stdin.pause();
callback(false, password);
break;
case "\u0003":
// Ctrl-C
callback(true);
break;
default:
// More passsword characters
process.stdout.write('*');
password += ch;
break;
}
});
}
Puede manejar el retroceso con una declaración de caso adicional para '" u007F "'. Si la contraseña hasta el momento no está vacía, puede usar 'process.stdout.write ('\ 033 [<1> D')' para mover el cursor hacia atrás una columna; después de eso puedes escribir un espacio y luego volver a moverlo. –
Lo actualicé para trabajar con el retroceso y lo combiné con la respuesta original aceptada y agregué un enlace a un repositorio que planeo seguir mejorando. – CoolAJ86
Puede utilizar el read
módulo (divulgación: escrito por mí) para esto:
En su shell:
npm install read
Luego, en sus JS:
var read = require('read')
read({ prompt: 'Password: ', silent: true }, function(er, password) {
console.log('Your password is: %s', password)
})
https://github.com/isaacs/read - Tuve algunos problemas para buscar en Google este módulo, así que le voy a dejar un enlace aquí para su conveniencia. – paulolc
¿Hay una versión síncrona? – mpen
@Mark: ¿cómo podría ser? stdin es una secuencia y dispara eventos. Los eventos no se pueden procesar si una función está esperando para regresar. – josh3736
- 1. Obtener todo el tipo de entrada contraseña
- 2. Node.js: contraseña crypto.pbkdf2 a Hex
- 3. JOptionPane para obtener la contraseña
- 4. jQuery entrada de borrado [type = contraseña]
- 5. Cambiar el tipo de un campo de entrada utilizando jQuery (texto -> contraseña)
- 6. node.js - utilizando soldadura con express?
- 7. Obteniendo entrada de contraseña de línea de comando en Python
- 8. solicitud HTTP node.js utilizando 'request' de mikeal
- 9. Node.js obtener extensión de archivo
- 10. generar token de restablecimiento de contraseña en node.js
- 11. filepath autocompletion utilizando la entrada de usuarios
- 12. ¿Hay un módulo para obtener la entrada del usuario desde la línea de comando en node.js?
- 13. Node.js: Crear un proyecto Express utilizando CoffeeScript
- 14. Desinfección de entrada de usuario utilizando Python
- 15. Entrada de máscara de contraseña en una aplicación de consola
- 16. C entrada de contraseña de la línea de comando
- 17. Cómo crear un campo de entrada de contraseña usando Tkinter
- 18. Cómo crear el campo de entrada de contraseña en django
- 19. Ocultar entrada del usuario de solicitud de contraseña
- 20. Obtener usuario y contraseña de ConnectionStringSettings
- 21. Obtener entrada del usuario
- 22. HTML/CSS: ¿Cómo hacer que la entrada de "contraseña" muestre la contraseña?
- 23. wix obtener usuario de entrada
- 24. contraseña de entrada campo-> reemplazar viñetas con imágenes
- 25. Mostrar columna en DataGridView como entrada de contraseña tipo
- 26. LDAP autenticación de contraseña de usuario utilizando JNDI
- 27. Utilizando una biblioteca C compilada de emscripten de node.js
- 28. ¿Es posible hacer que la entrada del usuario sea invisible como una entrada de contraseña 'sudo'?
- 29. ¿Es posible desarrollar extensiones de Google Chrome utilizando node.js?
- 30. Utilizando la interpolación dentro de Node.js EJS incluye
No se puede comprobar el valor. Si presiona la tecla de retroceso u otro toque que no sea alfanumérico. –
'require ('tty'). SetRawMode()' está en desuso. – Scruffy