我正在尝试在ember-fire中添加自定义会话变量session.currentUser.isBusiness
。但是,在页面重新加载时,数据不会持续存在并消失。
我将登录逻辑放在我的登录路径中,如下所示:
import Ember from ‘ember’;
export default Ember.Component.extend({
classNames: [‘login-form’],
router: Ember.inject.service(‘-routing’),
actions: {
signIn(provider) {
let controller = this;
this.get(‘session’).open(‘firebase’, {
provider: provider,
email: this.get(‘email’) || ‘’,
password: this.get(‘password’) || ‘’,
}).then(() => {
this.get(‘session’).set(‘currentUser.isBusiness’, true );
controller.get(‘router’).transitionTo(‘business.portal’);
}, (error) => {
alert(error);
});
},
googleSignIn(){
let controller=this;
this.get(‘session’).open(‘firebase’, { provider: ‘google’}).then(function(data) {
data = null;
controller.transitionToRoute(‘portal’);
}, (error) => {
alert(error);
});
}
}
});
当我第一次登录时,它可以正常工作,我可以看到session.currentUser.isBusiness
设置为false;但是,当重新加载页面时,session.currentUser.isBusiness
不再存在。
我正在使用Ember 2.11和最新版本的ember-fire。
我应该更改哪些内容以确保数据仍然存在?
答案 0 :(得分:0)
您正在尝试将数据存储到Firebase内部表中(实际上您只是将属性设置为会话对象),但这是不可能的。请检查此answer。
您可以改为创建User
模型:
// app/models/user.js
import DS from 'ember-data';
export default DS.Model.extend({
// …
isBusiness: DS.attr('boolean')
});
如果找不到具有此uid
的用户,请检查您是否已登录此用户或创建新用户并设置所有属性。
// component
// …
this
.get('session')
.open('firebase', { provider: 'google' })
.then(() => {
let uid = this.get('session.currentUser.uid');
this
.get('store')
.findRecord('user', uid)
.then((user) => {
if (user) {
return console.log(user.get('isBusiness')); // => true
}
this
.get('store')
.createRecord('user', { id: uid, isBusiness: true })
.save()
.then((newUser) => {
console.log(newUser.get('isBusiness')); // => true
});
});
});
代码是“抽象的”所以你可以理解我的意思。如果您发现任何问题,请报告。