Я реализую Vue. js веб-приложение с GoogleFirebase и плагином Vuefire для firebase. Мне нужно обернуть объект Vue. js Firebase-Object в функцию Firebase onAuthStateChanged, чтобы получить данные из базы данных реального времени с помощью uid авторизованного пользователя. Логин реализован с помощью Vue -Router. Следующий код должен объяснить мой вопрос, и я надеюсь, что кто-нибудь может помочь мне с моим вопросом.
Это не работает, и я получаю ошибку UID Of Null.
firebase: {
tableTennisData: db.ref(auth.currentUser.uid).child('tableTennis'),
},
Эта функция , вызываемый с помощью кнопки, регистрирует правильный идентификатор пользователя в консоли.
methods: {
test: function(){
console.log(auth.currentUser.uid);
this.uid = auth.currentUser.uid;
},
}
Но если это работает без обработчика onAuthStateChanged, почему реализация с Firebase-Object не работает?
Вот как я отправляю sh данные в firebase и это работает очень хорошо из-за обработчика onAuthStateChanged из облачных функций firebase.
auth.onAuthStateChanged(function (){
db.ref(auth.currentUser.uid).child('tableTennis').push(obj);
});
Мне действительно нужен способ доступа к данным, отправленным пользователем uid. Я думаю, что мы могли бы решить эту ошибку с помощью Firebase-Object, заключенного в обработчик onAuthStateChanged.
Подводя итог, это функция входа в систему Vue -Router file.
const router = new VueRouter({
routes
});
router.beforeEach((to, from, next) =>{
const currentUser = auth.currentUser;
const requiresAuth = to.matched.some(record => record.meta.requiresAuth);
if(requiresAuth && !currentUser){
next('/login');
}else if(!requiresAuth && currentUser){
next('/home');
}else{
next();
}
});
export default router;
И, наконец, это главный. js файл.
import Vue from "vue";
import App from "./App.vue";
import router from "./router";
import firebase from "firebase";
import './firebase';
import { rtdbPlugin } from 'vuefire'
Vue.use(rtdbPlugin);
Vue.config.productionTip = false;
let app = '';
firebase.auth().onAuthStateChanged(() =>{
if(!app){
app = new Vue({
router,
render: h => h(App)
}).$mount("#app");
}
});
Другой файл firebase. js экспортирует переменные auth, которые равны firebase.auth () и db, который совпадает с firebase.database.
import { initializeApp } from 'firebase';
const firebase = initializeApp({
apiKey: "",
authDomain: "",
databaseURL: "",
projectId: "",
storageBucket: "",
messagingSenderId: "",
appId: "",
measurementId: ""
});
export const db = firebase.database();
export const auth = firebase.auth();
Информация об API была удалена для этого вопроса.
Надеюсь, этой информации достаточно, чтобы помочь мне решить эту проблему.
Спасибо.
firebase: {
tableTennisData: db.ref(auth.currentUser.uid).child('tableTennis'),
},
Ошибка UID = Null.