【问题标题】:How to disable stdin echo in a dart console application for password input如何在 dart 控制台应用程序中禁用 stdin 回显以输入密码
【发布时间】:2013-01-29 20:10:26
【问题描述】:

下面的例子会读入用户的密码,但也会以纯文本的形式回显,有没有办法解决这个问题?

Future<String> promptPassword() {
  var completer = new Completer<String>();
  var stream = new StringInputStream(stdin);
  stdout.writeString("Warning: Password will be displayed here until I find a better way to do this.\n");
  stdout.writeString("Watch your back...\n");
  stdout.writeString("GitHub password for $gituser: ");
  stream.onLine = () {
    var str = stream.readLine();
    stdin.close();
    completer.complete(str);
  };
  return completer.future;
}

【问题讨论】:

    标签: dart command-line-interface dart-io


    【解决方案1】:

    现在已经实现了。

    Stdin.echoMode

    import 'dart:io';
    
    void main() {
      print('Enter password: ');
      stdin.echoMode = false;
      var password = stdin.readLineSync();  
      // Do something with password...
    }
    

    【讨论】:

      【解决方案2】:

      在将 tty 控件添加到 dart:io 之前,这是不可能的。同时,我建议:

      stty -echo
      dart ./password.dart
      stty echo
      

      我在这里打开了一个错误:https://code.google.com/p/dart/issues/detail?id=8190

      【讨论】:

        【解决方案3】:

        dart DCli 包提供了执行此操作的选项。

        https://pub.dev/packages/dcli

        import 'package:dcli/dcli.dart';
        
        void main() {
          var password = ask('password', hidden: true);
        }
        

        【讨论】:

          猜你喜欢
          • 2011-04-09
          • 1970-01-01
          • 1970-01-01
          • 2017-03-14
          • 1970-01-01
          • 1970-01-01
          • 2014-10-26
          • 2017-09-10
          • 1970-01-01
          相关资源
          最近更新 更多