首页 > 解决方案 > 为什么Mongo数据库中的数据和我从flutter App输入的数据不一样?

问题描述

我正在尝试从颤振 UI 获取数据并使用 Bloc 状态管理将其发送到节点服务器。作为响应,它应该向电子邮件发送验证码或重新发送电子邮件代码的消息...我一直拥有重新发送电子邮件和一条错误消息,说电子邮件和密码不被接受!!并将数据库中的用户数据保存为实例!但是当我重新输入相同的电子邮件以注册为新用户时,Node 会给出一个 200 状态代码,并带有一条消息,表明用户已经存在! PS:我已经从电子邮件 The Bloc Class中打开了安全性较低的应用程序和 Recaptcha :

class RegisterBloc {
  String _email = '';
  String _password = '';
  String _username = '';

  final _registerStateController = StreamController<Map>();
  final _emailStateController = StreamController<String>();
  final _usernameStateController = StreamController<String>();
  final _passwordStateController = StreamController<String>();

  StreamSink<Map> get _inUserData => _registerStateController.sink;
  Stream<Map> get userData => _registerStateController.stream;

  StreamSink<String> get _inEmail => _emailStateController.sink;
  Stream<String> get email => _emailStateController.stream;

  StreamSink<String> get _inUsername => _usernameStateController.sink;
  Stream<String> get username => _usernameStateController.stream;

  StreamSink<String> get _inPassword => _passwordStateController.sink;
  Stream<String> get password => _passwordStateController.stream;

  final _registerEventController = StreamController<AuthEvent>();
  Sink<AuthEvent> get registerEventSink => _registerEventController.sink;

  final _emailEventController = StreamController<AuthEvent>();
  Sink<AuthEvent> get emailEventSink => _emailEventController.sink;

  final _usernameEventController = StreamController<AuthEvent>();
  Sink<AuthEvent> get usernameEventSink => _usernameEventController.sink;

  final _passwordEventController = StreamController<AuthEvent>();
  Sink<AuthEvent> get passwordEventSink => _passwordEventController.sink;

  RegisterBloc() {
    // StreamController<SlarkEvent> _registerEventController;
    _registerEventController.stream.listen(_mapEventToState);

    _emailEventController.stream.listen(_mapEventToState);

    _usernameEventController.stream.listen(_mapEventToState);

    _passwordEventController.stream.listen(_mapEventToState);
  }

  setEmail(value) {
    _email = value;
    print(_email);
  }

  setUsername(value) {
    _username = value;
    print(_username);
  }

  setPassword(value) {
    _password = value;
    print(_password);
  }

  _mapEventToState(AuthEvent event) async {
    Map<String, String> header = <String, String>{
      "Content-Type": "application/json; charset=UTF-8",
    };
    String url = 'http://10.0.2.2:3000/user/signup';
    // var data = jsonDecode(response.body);
    Map<String, String> udata;
    if (event is EmailEvent) {
      // setEmail;
      _inEmail.add(_email);
    } else if (event is UsernameEvent) {
      print(_username);
      // setUsername;
      _inUsername.add(_username);
    } else if (event is PasswordEvent) {
      //setPassword;
      _inPassword.add(_password);
    } else {
      udata = <String, String>{
        'email': emailEventSink.toString(),
        'password': passwordEventSink.toString(),
        'name': usernameEventSink.toString()
      };
      _inUserData.add(udata);

      post(url, headers: header, body: jsonEncode(udata))
          .then((response) => print(response.body))
          .catchError((error) => print('YOUR ERROR IS : $error'));
      // print(response.body.toString());
      //print(json.decode(response.body));

    }
    print(_email);
    print(_password);
    print(_username);
  }

  void dispose() {
    _registerStateController.close();
    _registerEventController.close();

    _emailStateController.close();
    _emailEventController.close();

    _usernameStateController.close();
    _usernameEventController.close();

    _passwordStateController.close();
    _passwordEventController.close();
  }
}

用户界面:

class _SignInState extends State<SignIn> {
  //assign the api to a variable to use it.

  final _bloc = new RegisterBloc();

  final _formKey = GlobalKey<FormState>();
  String username = '';
  String email = '';
  String password = '';
  // Map serverResponse = {};
  // final authServ = AuthServ();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      body: SingleChildScrollView(
          child: StreamBuilder(
              stream: _bloc.userData,
              initialData: <String, String>{},
              builder: (context, AsyncSnapshot<dynamic> snapshot) {
                return Container(
                  padding:
                      EdgeInsets.symmetric(vertical: 20.0, horizontal: 50.0),
                  child: Form(
                      key: _formKey,
                      child: Column(
                        children: <Widget>[
                          SizedBox(height: 10.0),
                          TextFormField(
                            decoration: InputDecoration(
                              hintText: 'ex. John Joe',
                              labelText: 'User Name',
                              labelStyle: TextStyle(letterSpacing: 4.0),
                              enabledBorder: OutlineInputBorder(
                                  borderSide: BorderSide(
                                      width: 1.0, color: Colors.grey)),
                              focusedBorder: OutlineInputBorder(
                                  borderSide: BorderSide(
                                      width: 1.0, color: Colors.green[700])),
                            ),
                            validator: (val) =>
                                val.isEmpty ? 'Enter a Username' : null,
                            onChanged: (val) {
                              _bloc.usernameEventSink.add(UsernameEvent(val));
                              // print("username : $val");
                            },
                          ),
                          SizedBox(height: 30.0),
                          TextFormField(
                            decoration: InputDecoration(
                              hintText: 'example@example.com',
                              labelText: 'E-Mail',
                              labelStyle: TextStyle(letterSpacing: 4.0),
                              enabledBorder: OutlineInputBorder(
                                  borderSide: BorderSide(
                                      width: 1.0, color: Colors.grey)),
                              focusedBorder: OutlineInputBorder(
                                  borderSide: BorderSide(
                                      width: 1.0, color: Colors.green[700])),
                            ),
                            validator: (val) =>
                                val.isEmpty ? 'Enter an Email' : null,
                            onChanged: (val) {
                              _bloc.emailEventSink.add(EmailEvent(val));
                              // print("email : $val");
                            },
                          ),
                          SizedBox(height: 30.0),
                          TextFormField(
                            decoration: InputDecoration(
                              labelText: 'Password',
                              labelStyle: TextStyle(letterSpacing: 4.0),
                              enabledBorder: OutlineInputBorder(
                                  borderSide: BorderSide(
                                      width: 1.0, color: Colors.grey)),
                              focusedBorder: OutlineInputBorder(
                                  borderSide: BorderSide(
                                      width: 1.0, color: Colors.green[700])),
                            ),
                            validator: (val) {
                              if (val.isEmpty)
                                return 'Enter a Password';
                              else if (val.length < 6)
                                return 'Your Password must be at least 6 Characters';
                              else
                                return null;
                            },
                            obscuringCharacter: '*',
                            autocorrect: false,
                            keyboardType: TextInputType.visiblePassword,
                            obscureText: true,
                            onChanged: (val) {
                              _bloc.passwordEventSink.add(PasswordEvent(val));
                            },
                          ),
                          SizedBox(height: 35.0),
                          RaisedButton(
                            color: Color(0xff3A588C),
                            padding:
                                EdgeInsets.fromLTRB(25.0, 15.0, 25.0, 15.0),
                            child: Text(
                              'Sign In',
                              style: TextStyle(
                                color: Colors.white,
                                fontSize: 20.0,
                                letterSpacing: 1.0,
                              ),
                            ),
                            onPressed: () async {
                              if (_formKey.currentState.validate()) {
                                _bloc.registerEventSink.add(RegisterEvent());
                              }
                            },
                          ),

事件文件:

abstract class AuthEvent {}

class RegisterEvent extends AuthEvent {}

class EmailEvent extends AuthEvent {
  String email;
  EmailEvent(email) {
    this.email = email;
  }
}

class PasswordEvent extends AuthEvent {
  String password;
  PasswordEvent(password) {
    this.password = password;
  }
}

class UsernameEvent extends AuthEvent {
  String username;
  UsernameEvent(username) {
    this.username = username;
  }
}

保存在数据库中的是:名称:'_StreamSinkWrapper 的实例密码已加密 电子邮件:'_StreamSinkWrapper 的实例

请问有什么解决办法吗??谢谢。

标签: node.jsmongodbflutterblocstate-management

解决方案


推荐阅读