Làm cách nào để lấy mật khẩu từ đầu vào bằng cách sử dụng node.js? Điều đó có nghĩa là bạn không nên tạo mật khẩu được nhập trong bảng điều khiển.Nhận mật khẩu từ đầu vào bằng cách sử dụng node.js
Trả lời
Cập nhật 2015 ngày 13 tháng 12: readline
đã thay thế process.stdin
và 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: ');
Để thực hiện điều này, tôi thấy điều này tuyệt vời Google Group post
nào chứa đoạn mã sau:
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
}
})
Note process.binding ("stdio") không còn hoạt động trong các phiên bản hiện tại của nút – mikemaccana
Đây là phiên bản của tôi tinh chỉnh của thợ làm đinh của từ trên cao, được cập nhật để có được một cuộc gọi lại và cho nút 0.8 sử dụng:
/**
* 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;
}
});
}
Bạn có thể xử lý backspace bằng câu lệnh bổ sung cho '" u007F "'. Nếu mật khẩu cho đến nay không trống, bạn có thể sử dụng 'process.stdout.write ('\ 033 [<1> D')' để di chuyển con trỏ trở lại một cột; sau đó bạn có thể viết một không gian, sau đó di chuyển trở lại một lần nữa. –
Tôi cập nhật điều này để làm việc với backspace và sáp nhập nó với câu trả lời được chấp nhận ban đầu và thêm một liên kết đến một repo mà tôi dự định tiếp tục cải thiện. – CoolAJ86
Bạn có thể sử dụng read
mô-đun (tiết lộ: bằng văn bản của tôi) cho việc này:
Trong shell của bạn:
npm install read
Sau đó, trong JS của bạn:
var read = require('read')
read({ prompt: 'Password: ', silent: true }, function(er, password) {
console.log('Your password is: %s', password)
})
https://github.com/isaacs/read - Đã có một số vấn đề khó khăn đối với mô-đun này, vì vậy, tôi đang xóa một liên kết tới đây để thuận tiện cho bạn. – paulolc
Có phiên bản đồng bộ không? – mpen
@Mark: Làm cách nào có thể? stdin là một dòng và cháy các sự kiện. Không thể xử lý sự kiện nếu chức năng đang chờ trả lại. – josh3736
- 1. Cách nhận mật khẩu từ xác thực cơ bản HTTP
- 2. Nhận tất cả mật khẩu loại nhập
- 3. Khôi phục mật khẩu bằng mật khẩu sha1 băm
- 4. Bắt chước đầu vào loại mật khẩu khi sử dụng div có thể chỉnh sửa được
- 5. đăng nhập từ xa bằng "mstsc/admin" bằng mật khẩu
- 6. SpringSecurity UserDetailsService nhận mật khẩu
- 7. jQuery rõ ràng đầu vào [type = mật khẩu]
- 8. Nhận mảng giá trị từ nhiều đầu vào bằng cách sử dụng jQuery
- 9. Cách đặt mật khẩu vào mã
- 10. Nhập Mật khẩu vào C
- 11. Validators, xác nhận mật khẩu
- 12. Lưu mật khẩu bằng Md5
- 13. Xác nhận mật khẩu bằng jQuery Xác thực
- 14. Node.js - Cách nhận luồng vào chuỗi
- 15. Cách sử dụng MD5 trong javascript để truyền mật khẩu
- 16. PowerShell - Mật khẩu giải mã nhận-Credential?
- 17. Có thể làm cho đầu vào của người dùng ẩn thành đầu vào mật khẩu 'sudo' không?
- 18. Cách đặt tên người dùng và mật khẩu smtp bằng cách sử dụng ini_set
- 19. Lưu trữ tên người dùng/mật khẩu trên máy Mac bằng cách sử dụng Java
- 20. Nhập mật khẩu dòng lệnh bằng Python
- 21. sử dụng các khóa ssh với cụm mật khẩu trên thiết lập đầu bếp vagrant +
- 22. Cách đặt mật khẩu gốc bằng cách sử dụng trạng thái muối
- 23. Đọc một mật khẩu từ std :: cin
- 24. Đặt lại mật khẩu bằng cách gửi email mật khẩu tạm thời
- 25. Mô phỏng mật khẩu() của MySql bằng cách sử dụng .NET hoặc MS SQL
- 26. Authentication với mật khẩu cũ không còn được hỗ trợ, sử dụng 4,1 mật khẩu phong cách
- 27. Cách tốt nhất để lưu mật khẩu vào sql
- 28. Tôi có mật khẩu được mã hóa md5, cách đặt mật khẩu cho người dùng khi sử dụng "Quên mật khẩu"?
- 29. Cách nhận thông tin chứng chỉ SSL bằng cách sử dụng node.js?
- 30. Cách tải lên một tệp (sử dụng FTP) vào một thư mục được bảo vệ bằng mật khẩu trong C#?
Bạn không thể xác minh giá trị. Nếu bạn nhấn backspace hoặc liên lạc khác không phải là chữ số. –
'require ('tty'). SetRawMode()' không được chấp nhận. – Scruffy