Я занимаюсь разработкой приложения для флаттера и добавил в проект firebase auth.И он работает нормально для входа в Google, но я не понимаю, как работает make. Войдите с помощью электронной почты и пароля.
Я следую приведенному там примеру https://flutterbyexample.com/log-in-redux-cycle-contd.
Я добавил действия, редукторы и промежуточное программное обеспечение следуют инструкциям для входа в Google, но в случае электронной почты и пароля происходит странное событие.
Здесь журнал:
I/FirebaseAuth(27942): [FirebaseAuth:] Loading module via FirebaseOptions.
I/FirebaseAuth(27942): [FirebaseAuth:] Preparing to create service connection to gms implementation
D/FirebaseAuth(27942): Notifying id token listeners about user ( MZr9euoZKEbWWqNIrB5OcZIWcwf2 ).
D/FirebaseApp(27942): Notifying auth state listeners.
D/FirebaseApp(27942): Notified 0 auth state listeners.
I/flutter (27942): [INFO] LoggingMiddleware: {Action: LogInWithMailAndPasswordFail{There was an error loggin in: Invalid argument(s)}, State: AppState{isLoading: false, currentUser: null}}, ts: 2018-12-27 09:03:18.185480}
I/flutter (27942): [INFO] LoggingMiddleware: {Action: Instance of 'LogInWithMailAndPassword', State: AppState{isLoading: false, currentUser: null}}, ts: 2018-12-27 09:03:18.199120}
Как вы можете видеть на самом деле, вход в систему работаетно сразу после входа в систему вызывается действие LogInWithMailAndPasswordFail.
Часть кода промежуточного программного обеспечения здесь:
Middleware<AppState> _createLogInWithMailAndPasswordMiddleware() {
// These functions will always take
// your store,
// the action thats been dispatched
// and the a special function called next.
return (Store store, action, NextDispatcher next) async {
// FirebaseUser is the type of your User.
FirebaseUser user;
// Firebase 'instances' are temporary instances which give
// you access to your FirebaseUser. This includes
// some tokens we need to sign in.
final FirebaseAuth _auth = FirebaseAuth.instance;
if (action is LogInWithMailAndPassword) {
try {
user = await _auth.signInWithEmailAndPassword(
email: action.getUsername(),
password: action.getPassword());
print('Logged in ' + user.displayName);
// This can be tough to reason about -- or at least it was for me.
// We're going to dispatch a new action if we logged in,
//
// We also continue the current cycle below by calling next(action).
store.dispatch(new LogInWithMailAndPasswordSuccessful(user: user));
} catch (error) {
store.dispatch(new LogInWithMailAndPasswordFail(error));
}
}
// After you do whatever logic you need to do,
// call this Redux built-in method,
// It continues the redux cycle.
next(action);
};
}