【问题标题】:Custom session data not persisting in ember-fire自定义会话数据不保留在 ember-fire 中
【发布时间】:2017-04-17 14:33:41
【问题描述】:

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

我应该改变什么来确保数据持续存在?

【问题讨论】:

    标签: javascript session firebase ember.js emberfire


    【解决方案1】:

    您正在尝试将数据存储到 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
              });
          }); 
      });
    

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

    【讨论】:

      猜你喜欢
      • 2016-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多