У меня есть компонент с формой, которая содержит адрес электронной почты и пароль. Импорт вверху:
import Component from '@ember/component';
import { inject as service } from '@ember/service';
import { computed } from '@ember/object';
import * as firebase from 'firebase';
Далее я внедряю сервис для firebaseApp и сеанса (сеанс просто имеет некоторые атрибуты, которые я установил, чтобы сообщить приложению, что мы аутентифицированы - они будут реорганизованы позже):
session: service(),
firebaseApp: service(),
Если я передаю эти значения в функцию signInWithEmailAndPassword()
из fbApp.auth()
, учетная запись проверяется и входит в систему. Работает, как и ожидалось:
login() {
const session = this.get('session');
const fbApp = this.get('firebaseApp');
const e = this.get('form.email');
const p = this.get('form.password');
fbApp.auth().signInWithEmailAndPassword(e, p).then(u => {
session.set('user.email', u.email);
session.set('user.signedIn', true);
this.get('goHome')(); // route transition to home
}).catch(e => {
this.set('error', 'Something went wrong. Try again?');
});
}
Далее я хотел сохранить сеанс, чтобы пользователь не вышел из системы при обновлении, только если вкладка закрыта. Поэтому я изменил код и обернул signInWithEmailAndPassword
в setPersistence
следующим образом:
login() {
const session = this.get('session');
const fbApp = this.get('firebaseApp');
const e = this.get('form.email');
const p = this.get('form.password');
fbApp.auth().setPersistence(firebase.auth.Auth.Persistence.SESSION)
.then(()=> {
fbApp.auth().signInWithEmailAndPassword(e, p).then(u => {
session.set('user.email', u.email);
session.set('user.signedIn', true);
this.get('goHome')(); // route transition to home
}).catch(e => {
this.set('error', 'Something went wrong. Try again?');
});
}).catch(e => {
this.set('error', 'Something went wrong. Try again?');
});
}
Это не работает. Я получаю Cannot read property 'SESSION' of undefined
ошибку в консоли. Я уверен, что это связано с тем, как импортируется firebase, но у меня проблемы с этим.