2016-06-28 39 views
3

我正在使用EmberFire與會議的Torii。我得到一個奇怪的問題,當我註銷用戶,和下面的錯誤在控制檯拋出:關閉emberfire/torii會話和註銷拋出permission_denied錯誤

firebase.js:186 Error: permission_denied at /folders/-KKvrk3K_JOHxQWgR1km: Client doesn't have permission to access the desired data.(…)(anonymous function) @ firebase.js:186(anonymous function) @ firebase.js:380Tb @ firebase.js:276uc @ firebase.js:263vc @ firebase.js:262(anonymous function) @ firebase.js:449vh @ firebase.js:434g.wd @ firebase.js:425Ye.wd @ firebase.js:328(anonymous function) @ firebase.js:326vd @ firebase.js:279La.onmessage @ firebase.js:278 
firebase.js:186 Error: permission_denied at /folders/-KLFp3zh5QUB7KvMF0HZ: Client doesn't have permission to access the desired data.(…)(anonymous function) @ firebase.js:186(anonymous function) @ firebase.js:380Tb @ firebase.js:276uc @ firebase.js:263vc @ firebase.js:262(anonymous function) @ firebase.js:449vh @ firebase.js:434g.wd @ firebase.js:425Ye.wd @ firebase.js:328(anonymous function) @ firebase.js:326vd @ firebase.js:279La.onmessage @ firebase.js:278 
firebase.js:186 Error: permission_denied at /externalApps/-KLF_wKXtzm38EHtuQ_C: Client doesn't have permission to access the desired data.(…)(anonymous function) @ firebase.js:186(anonymous function) @ firebase.js:380Tb @ firebase.js:276uc @ firebase.js:263vc @ firebase.js:262(anonymous function) @ firebase.js:449vh @ firebase.js:434g.wd @ firebase.js:425Ye.wd @ firebase.js:328(anonymous function) @ firebase.js:326vd @ firebase.js:279La.onmessage @ firebase.js:278 
firebase.js:186 Error: permission_denied at /users/-KLKUOZRBCIeCj44WMe7: Client doesn't have permission to access the desired data.(…)(anonymous function) @ firebase.js:186(anonymous function) @ firebase.js:380Tb @ firebase.js:276uc @ firebase.js:263vc @ firebase.js:262(anonymous function) @ firebase.js:449vh @ firebase.js:434g.wd @ firebase.js:425Ye.wd @ firebase.js:328(anonymous function) @ firebase.js:326vd @ firebase.js:279La.onmessage @ firebase.js:278 
firebase.js:186 Error: permission_denied at /externalApps/-KLIyXUwTSrkCIL4rz7U: Client doesn't have permission to access the desired data. 

有兩個地方我登錄用戶:

在登記時

register(data) { 
    return this.get('firebaseApp') 
    .auth() 
    .createUserWithEmailAndPassword(data.email, data.password) 
    .then((registeredUser) => { 
     const newUser = this.store.createRecord('user', { 
     uid: registeredUser.uid, 
     firstName: data.firstName, 
     lastName: data.lastName, 
     email: registeredUser.email 
     }) 
     return newUser.save(); 
    }) 
    .then((savedUser) => { 
     return this.get('session').fetch().then(() => { 
     return savedUser; 
     }); 
    }) 
    .then((savedUser) => { 
     this.replaceWith('dashboard'); 
    }); 
} 

對於已經註冊的用戶

login(email, password) { 
    const controller = this.controllerFor('index'); 
    this.get('session').open('firebase', { 
    provider: 'password', 
    email: email, 
    password: password 
    }) 
    .then((/* response */) => { 
    controller.set('loginError', undefined); 
    this.replaceWith('dashboard'); 
    }) 
    .catch((error) => { 
    controller.set('loginError', error); 
    }); 
} 

這裏是出記錄用戶的操作:我有這個大約一個星期前同樣的問題

logout() { 
    this.get('session').close().then(() => { 
    this.store.unloadAll(); 
    this.replaceWith('index'); 
    }); 
} 

回答

4

。看來,Emberfire在那裏實施的方式Ember數據擴展名不允許使用store.unloadAll()

我開了一個問題here,但還沒有看到來自團隊的任何迴應。

通過直接從商店卸載用戶,您可以輕鬆解決此問題。只要你使用store.unloadRecord(<specificRecord>)<specificRecord.unload()然後一切正常。

對於您的情況,您可以在登錄或註冊新用戶時保存用戶記錄,然後在註銷時卸載該記錄。如果所有這些操作都不在同一個控制器中,則可能必須創建一個服務來處理該交互。

希望可以幫到