Come ottenere la password dall'input usando node.js? Il che significa che non devi inserire la password immessa nella console.Ottieni la password dall'input usando node.js
risposta
Aggiornamento 2015 13 dicembre: readline
ha sostituito process.stdin
e 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: ');
Per fare questo ho trovato questo eccellente Google Group post
che contiene il seguente frammento:
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") non funziona più nelle versioni correnti di nodo – mikemaccana
Ecco la mia versione ottimizzato di Chiodatrice di dall'alto, aggiornato per ottenere un callback e per il nodo 0.8 utilizzo:
/**
* 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;
}
});
}
È possibile gestire il backspace con un'istruzione case aggiuntiva per "" u007F "'. Se la password fino a quel momento non è vuota, puoi usare 'process.stdout.write ('\ 033 [<1> D')' per spostare il cursore indietro di una colonna; dopodiché puoi scrivere uno spazio, quindi tornare indietro. –
L'ho aggiornato per funzionare con backspace e unito con la risposta originale accettata e aggiunto un collegamento a un repository che ho intenzione di continuare a migliorare. – CoolAJ86
È possibile utilizzare il modulo read
(divulgazione: scritto da me) per questo:
nella shell:
npm install read
Poi, nel tuo 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 - Ho avuto qualche problema su google per questo modulo, quindi vi ho lasciato un link qui per vostra comodità. – paulolc
Esiste una versione sincrona? – mpen
@ Marco: come potrebbe esserci? stdin è un flusso e genera eventi. Gli eventi non possono essere elaborati se una funzione è in attesa di ritorno. – josh3736
- 1. Come inserire la password ssh usando bash?
- 2. Come tagliare la stringa usando node.js?
- 3. Ottieni tutti i tipi di immissione password
- 4. continua a chiedere la password usando la connessione SSH
- 5. Come confrontare la password in testo semplice con la password con hash usando bcrypt?
- 6. Node.js HTTP Ottieni limite lunghezza URL
- 7. Ottieni la funzione nome e linea di chiamata in node.js
- 8. Ottieni la larghezza e l'altezza di un'immagine in node.js
- 9. Includere blocchi HTML usando node.js
- 10. Ottieni avanzamento download in Node.js con richiesta
- 11. Generare un file ZIP protetto da password in node.js
- 12. Node.js - Ottieni il numero di processori disponibili
- 13. Come specificare la password della chiave usando javax.net.ssl?
- 14. come cambiare la password del keystore PKCS12 usando keytool?
- 15. Ottieni contenuto URL in Node.js con Express
- 16. Ottieni il percorso completo dell'applicazione in Node.js
- 17. Ottieni l'ISP di un IP in node.js
- 18. Ottieni nome file usando xsl
- 19. Quale crittografia password sta usando Jenkins?
- 20. Ottieni una password dall'utente in Fabric, non riecheggiando il valore
- 21. Come ottenere node.js per connettersi a mongolab usando mangusta
- 22. Bash dell'hash di password in Golang (compatibile con Node.js)?
- 23. Ottieni la percentuale di caricamento della pagina usando javascript?
- 24. Ottieni il nome del campo struct usando la riflessione
- 25. NHibernate, ottieni la collezione di nipoti usando QueryOver w/Future
- 26. Ottieni la temperatura del disco rigido usando Python
- 27. Ottieni la variabile dal file PHP usando JQuery/AJAX
- 28. Come verificare l'hash della password ASP.NET in node.js
- 29. È meglio reimpostare la password o inviare la password persa?
- 30. Redis-cli con la password
Non è possibile verificare il valore. Se premi backspace o altro tocco che non è alfanumerico. –
'require ('tty'). SetRawMode()' è deprecato. – Scruffy