Tôi muốn yêu cầu người dùng nhập mật khẩu, nhưng tôi không muốn ký tự xuất hiện trên màn hình khi họ nhập.
Làm cách nào để thực hiện điều này trong Ruby?
Tôi muốn yêu cầu người dùng nhập mật khẩu, nhưng tôi không muốn ký tự xuất hiện trên màn hình khi họ nhập.
Làm cách nào để thực hiện điều này trong Ruby?
Có một đá quý cho tương tác người dùng như vậy: highline.
password = ask("Password: ") { |q| q.echo = false }
Hoặc thậm chí:
password = ask("Password: ") { |q| q.echo = "*" }
Nếu bạn đang ở trên một hệ thống với stty
:
`stty -echo`
print "Password: "
pw = gets.chomp
`stty echo`
puts ""
Không có đá quý xin vui lòng, tôi thích câu trả lời này ;-) – lzap
câu trả lời tương tự như glenn nhưng hoàn chỉnh hơn: http://dmathieu.com/articles/development/ruby-console-ask-for-a-password/
Đây là giải pháp cho hệ thống UNIX:
begin
system "stty -echo"
print "Password: "; pass1 = $stdin.gets.chomp; puts "\n"
print "Password (repeat): "; pass2 = $stdin.gets.chomp; puts "\n"
if pass1 == pass2
# DO YOUR WORK HERE
else
STDERR.puts "Passwords do not match!"
end
ensure
system "stty echo"
end
Bạn muốn đảm bảo mã của bạn là không cần thiết ... các giải pháp khác được liệt kê ở đây giả sử bạn muốn thoát khỏi đoạn chức năng này bằng tiếng vọng được bật trở lại. Vâng, nếu nó đã bị tắt trước khi nhập mã, và nó dự kiến sẽ ở lại?
stty_settings = %x[stty -g]
print 'Password: '
begin
%x[stty -echo]
password = gets
ensure
%x[stty #{stty_settings}]
end
puts
print 'regular info: '
regular_info = gets
puts "password: #{password}"
puts "regular: #{regular_info}"
Bạn có thể sử dụng phương pháp STDIN.noecho từ các module IO/console:
pw = STDIN.noecho(&:gets).chomp
ngọt ngào! (15chars) – st0le
Nếu thiết bị đầu cuối của người dùng không có nền đen thì sao? –
của nó chỉ cho một kịch bản trong nhà, do đó, nó không phải là một vấn đề :) tốt để chỉ ra cho những người khác mặc dù –