Chcę poprosić użytkowników o wpisanie hasła, ale nie chcę, aby znaki pojawiały się na ekranie podczas pisania.
Jak to zrobić w Ruby?
Chcę poprosić użytkowników o wpisanie hasła, ale nie chcę, aby znaki pojawiały się na ekranie podczas pisania.
Jak to zrobić w Ruby?
Jest taki klejnot dla takiej interakcji użytkownika: highline.
password = ask("Password: ") { |q| q.echo = false }
Albo nawet:
password = ask("Password: ") { |q| q.echo = "*" }
Jeśli jesteś na systemie z stty
:
`stty -echo`
print "Password: "
pw = gets.chomp
`stty echo`
puts ""
Brak klejnotów, podoba mi się ta odpowiedź ;-) – lzap
Podobny odpowiedź jak Glenn ale bardziej kompletne: http://dmathieu.com/articles/development/ruby-console-ask-for-a-password/
To rozwiązanie dla systemów 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
Chcesz się upewnić, że twój kod jest idempotentny ... inne wymienione tutaj rozwiązania zakładają, że chcesz wyjść z tego kawałka funkcjonalności, gdy echo jest ponownie włączone. Cóż, a jeśli to było wyłączone przed wpisaniem kodu i oczekuje się, że pozostanie wyłączone?
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}"
Można użyć metody STDIN.noecho z modułu IO/konsoli:
pw = STDIN.noecho(&:gets).chomp
słodki! (15chars) – st0le
Co zrobić, jeśli terminal użytkownika nie ma czarnego tła? –
to tylko dla skryptu w domu, więc nie jest to problem :) dobrze zwrócić uwagę na innych, chociaż –