自定义会话数据不会在余烬中持续存在

时间:2017-04-17 14:33:42

标签: javascript session firebase ember.js emberfire

我正在尝试在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。

我应该更改哪些内容以确保数据仍然存在?

1 个答案:

答案 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
          });
      }); 
  });

代码是“抽象的”所以你可以理解我的意思。如果您发现任何问题,请报告。