Jak uzyskać hasło z danych wejściowych za pomocą pliku node.js? Co oznacza, że nie powinieneś wyprowadzać hasła wprowadzonego w konsoli.Uzyskaj hasło z danych wejściowych za pomocą pliku node.js
Odpowiedz
Aktualizuj 2015 gru 13: readline
zastąpił process.stdin
i 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: ');
Aby to zrobić, znalazłem to doskonały Google Group post
który zawiera następujący fragment:
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
}
})
Uwaga process.binding („stdio”) nie działa w obecnej wersji węzła – mikemaccana
Oto moja manipulowane wersja gwoździarka na z góry, zaktualizowane, aby uzyskać zwrotnego oraz dla węzła 0,8 Zastosowanie:
/**
* 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;
}
});
}
Możesz obsługiwać backspace z dodatkową instrukcją case dla '" u007F "'. Jeśli dotychczasowe hasło nie jest puste, możesz użyć polecenia 'process.stdout.write ('\ 033 [<1> D')', aby przesunąć kursor o jedną kolumnę do tyłu; po tym możesz napisać spację, a następnie wrócić ponownie. –
Zaktualizowałem to do pracy z backspace i połączyłem go z oryginalną, zaakceptowaną odpowiedzią i dodałem link do repo, które planuję dalej ulepszać. – CoolAJ86
można użyć modułu read
(ujawnienie: napisany przeze mnie) w tym:
w swojej powłoce:
npm install read
Następnie w 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 - Wystąpił problem z googlowaniem dla tego modułu, więc umieszczam tutaj link dla Twojej wygody. – paulolc
Czy istnieje wersja synchroniczna? – mpen
@ Mark: Jak to możliwe? stdin jest strumieniem i uruchamia zdarzenia. Zdarzenia nie mogą być przetworzone, jeśli funkcja oczekuje na powrót. – josh3736
- 1. Monit Node.js pomijanie danych wejściowych
- 2. Wstawianie danych za pomocą Node.js
- 3. Jak usunąć naciśnięcie klawisza z danych wejściowych za pomocą jquery?
- 4. Tworzenie pliku RDF z użyciem pliku txt jako danych wejściowych
- 5. Automatyczne zapisywanie danych wejściowych formularza za pomocą jQuery + ASP.NET MVC
- 6. Ustaw atrybut wartości rzeczywistej danych wejściowych za pomocą jQuery
- 7. Zmiana typu pola wprowadzania za pomocą jQuery (tekst -> hasło)
- 8. Uzyskaj odpowiedź z pliku PHP za pomocą AJAX
- 9. Uzyskaj nazwę pliku z adresu URL za pomocą Lua
- 10. Uzyskaj różne miesiące z bazy danych za pomocą HQL
- 11. Wprowadzanie danych wejściowych za pomocą BufferedReader w Javie
- 12. Uzyskaj wynik polecenia powłoki w pliku node.js
- 13. Ustaw hasło do pliku ZIP za pomocą DotNetZip
- 14. Uzyskaj zasób z ResourceDictionary za pomocą klucza
- 15. Node.js, Express, Mongoose - sprawdzanie danych wejściowych - w trasie lub modelu?
- 16. Uzyskaj zawartość adresu URL w pliku Node.js z usługą Express
- 17. Hasło chronione PDF za pomocą Ghostscript
- 18. Uzyskaj adres IP za pomocą skryptu akcji?
- 19. Uzyskaj nazwę pliku z pliku wejściowego Angular2
- 20. Dynamiczne wprowadzanie dynamicznych danych wejściowych za pomocą danych json, nunjucks i pętli for
- 21. Pobieranie zawartości binarnej w pliku node.js za pomocą http.request
- 22. Jak określić hasło klucza za pomocą javax.net.ssl?
- 23. Wyświetlanie obrazu za pomocą EJS w pliku node.js/express
- 24. Jak uzyskać informacje o certyfikacie SSL za pomocą pliku node.js?
- 25. Testowanie interfejsu API WWW za pomocą jaśminu i pliku node.js
- 26. Uzyskaj tablicę wartości z wielu wejść za pomocą jQuery
- 27. Uzyskaj schemat bazy danych za pomocą jednego zapytania?
- 28. Uzyskaj tytuł i rok od nazwy pliku za pomocą regex
- 29. Uzyskaj dane serwera Sql za pomocą smo
- 30. Uzyskaj zasoby za pomocą ciągu znaków
Nie można zweryfikować wartość. Jeśli naciśniesz klawisz Backspace lub inne dotknięcie, który nie jest alfanumeryczny. –
'require ('tty'). SetRawMode()' jest przestarzałe. – Scruffy