Desidero chiedere agli utenti di digitare una password, ma non voglio che i caratteri vengano visualizzati sullo schermo mentre digitano.
Come si fa in Ruby?
Desidero chiedere agli utenti di digitare una password, ma non voglio che i caratteri vengano visualizzati sullo schermo mentre digitano.
Come si fa in Ruby?
C'è una gemma per tale interazione utente: highline.
password = ask("Password: ") { |q| q.echo = false }
O anche:
password = ask("Password: ") { |q| q.echo = "*" }
Se siete su un sistema con stty
:
`stty -echo`
print "Password: "
pw = gets.chomp
`stty echo`
puts ""
Nessuna gemma, mi piace questa risposta ;-) – lzap
risposta simile come Glenn, ma più completo: http://dmathieu.com/articles/development/ruby-console-ask-for-a-password/
Questa è la soluzione per sistemi 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
Si desidera assicurarsi che il codice è idempotente ... altre soluzioni elencate qui presuppongono che si desidera uscire da questa pezzo di funzionalità con eco riaccesa. Bene, cosa succede se è stato spento prima di inserire il codice, e si prevede che rimanga spento?
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}"
È possibile utilizzare il metodo STDIN.noecho dal modulo IO/console:
pw = STDIN.noecho(&:gets).chomp
dolce! (15 carati) – st0le
Cosa succede se il terminale dell'utente non ha uno sfondo nero? –
è solo per uno script interno, quindi non è un problema :) buono da segnalare per gli altri anche se –