node.js - 为什么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.js - 节点套接字服务器上的多 redux 存储
- android - Oreo Emulator doesn't have Google Play Services for Maps API
- c# - Skipping Feature - SpecFlow C#
- azure - 如何使用服务主体提供对 Azure 中存储帐户的访问权限
- javascript - 谷歌分析批处理上的正则表达式无效
- reactjs - 为什么我的 ImageBackground 不再延伸到屏幕底部?
- maven - Wildfly swarm - 找不到页面错误
- css - bs4 自定义选择无法正常工作
- asynchronous - 带 EXIF 旋转校正的多图像上传
- android - Realm sort() - 基于字符串或整数的排序