【发布时间】:2020-08-24 23:32:22
【问题描述】:
我正在使用 GoogleFirebase 和用于 firebase 的 Vuefire 插件实现 Vue.js Web 应用程序。我必须将 Vue.js Firebase-Object 包装到 Firebase onAuthStateChanged 函数中,以通过登录用户 uid 从实时数据库中获取数据。登录是用 Vue-Router 实现的。以下代码应该解释我的问题,我希望有人可以帮助我解决我的问题。
这不起作用,我收到 UID Of Null 错误。
firebase: {
tableTennisData: db.ref(auth.currentUser.uid).child('tableTennis'),
},
此函数通过按钮调用,将正确的用户 ID 记录到控制台中。
methods: {
test: function(){
console.log(auth.currentUser.uid);
this.uid = auth.currentUser.uid;
},
}
但如果这在没有“onAuthStateChanged”处理程序的情况下工作,为什么使用 Firebase-Object 的实现不起作用?
这就是我将数据推送到 firebase 的方式,并且由于 firebase 云函数中的“onAuthStateChanged”处理程序而运行良好。
auth.onAuthStateChanged(function (){
db.ref(auth.currentUser.uid).child('tableTennis').push(obj);
});
我真的需要一种方法来访问用户 uid 推送的数据。我认为我们可以通过将 Firebase-Object 包装到“onAuthStateChanged”处理程序中来解决该错误。
总结一下,这就是Vue-Router文件的登录功能。
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;
最后,这是 main.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。
【问题讨论】:
标签: javascript firebase vue.js firebase-realtime-database vue-router