2014-11-25 3 views
1

Мы пытаемся выполнить аутентификацию с помощью customToken для Firebase - это работало до того, как мы перешли в EmberCLI, когда мы инициировали эти адаптеры Firebase на более позднем этапе выполнения приложений.Где выполнить аутентификацию с помощью customToken с помощью адаптеров

Сейчас пытается инициировать authCustomToken на более ранней стадии в адаптере с потоком следующим образом:

  • Инициировать адаптер
  • Крюк на «INIT» и запросить маркер из бэкэндом
  • Когда маркер получил - authWithCustomToken

код выглядит так же, как это:

import DS from 'ember-data'; 

/** 
* CartAdapter 
* @class adapters.Cart 
* @extends DS.FirebaseAdapter 
*/ 
export default DS.FirebaseAdapter.extend(ajax, { 
    firebase: new Firebase('https://firebasehost.com'), 
    pathForType: function() { 
     return 'carts/' + this.get('sessionService').get('userId'); 
    }, 
    initAdapter: function() { 
     this.ajaxRequest('backendhost/firebase/').then(function(data) { 
      var ref = new Firebase('https://firebasehost.com'); 
      ref.authWithCustomToken(data.token); 
     }); 
    }.on('init') 
}); 

Как наилучший способ приблизиться к этому?

+0

Итак, все работает? – givanse

+0

Нет, не так, как я реорганизовал выше. В документации Firebase говорится, что вам нужно только аутентифицировать один экземпляр «Firebase», и все они будут аутентифицированы. В приведенном выше случае кажется, что адаптер инициирован без аутентификации, а затем аутентифицируется. Это, по-видимому, приводит к тому, что все элементы, загруженные из «телег», не аутентифицированы, и любая попытка изменения завершится с ошибкой. Скорее всего, нам нужно проверить подлинность первого экземпляра firebase, но я не могу этого сделать, поскольку свойство firebase требуется при создании адаптера. – hussfelt

+1

Я раньше не использовал Firebase и, возможно, не полностью понял проблему. Однако это похоже на проблему, когда вам нужно настроить X, прежде чем что-либо еще сделать. Вы посмотрели на создание инициализаторов? http://emberjs.com/guides/understanding-ember/dependency-injection-and-service-lookup/#toc_dependency-injection-with-code-register-inject-code – givanse

ответ

0

Ошибка в том, что, похоже, EmberFire пока еще не поддерживает правило дочерней проверки. Скорее всего, потому, что он пытается обновить корзину до того, как элемент вставлен.

Это работало в Ember 1.7 и предыдущей версии EmberFire.

правило, блок ниже, который делает работу с той части, которая не работала раскомментирована:

"rules": { 
    // All data is accessible 
    ".read": true, 
    ".write": true, 
    "cartItem": { 
     "$userid": { 
      // A list of users carts. 
      "$cartitemid": { 
       // Only the user can read and write their own entries into this list. 
       ".write": "auth != null && $userid ==auth.uid", 
       ".read": "auth != null && $userid ==auth.uid", 
       "cart": { 
        // The following relation should only contain an actual id from the "cart" list. 
        "$cartid": { 
         ".validate": "root.child('carts').hasChild($cartid)" 
        } 
       } 
      } 
     } 
    }, 
    "carts": { 
     "$userid": { 
      "$cartid": { 
       // The user is allowed to read and write everything in their cart. 
       ".read": "auth != null && $userid ==auth.uid", 
       ".write": "auth != null && $userid ==auth.uid" 
       /*"items": { 
        // The following list should only contain actual ids from the "cartItems" list. 
        "$itemid": { 
         ".validate": "root.child('cartItem/' + $userid).hasChild($itemid)" 
        } 
       }*/ 
      } 
     } 
    } 
} 
Смежные вопросы