Firebase 身份验证和 Vue 路由器 [英] Firebase Auth and Vue-router

查看:35
本文介绍了Firebase 身份验证和 Vue 路由器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用 firebase 验证 Vue.js 应用程序.

我有一个问题,如果在登录时尝试直接访问受登录保护的 URL,路由器将加载并检查 auth 状态,然后 firebase.js 有时间返回 auth 响应.这会导致用户被退回到登录页面(当他们已经登录时).

如何延迟 vue-router 导航,直到从 firebase 检索到 auth 状态?我可以看到 firebase 将身份验证数据存储在 localStorage 中,检查它是否存在作为初步身份验证检查是否安全?理想情况下,最终结果是在用户通过身份验证时显示加载微调器或其他内容,然后他们应该能够访问他们导航到的页面.

路由器/index.js

let router = new Router({模式:'历史',路线: [{小路: '/',name: '家',组件:首页},{路径:'/登录',name: '登录',组件:登录},{路径:'/示例',name: '例子',组件:示例,beforeEnter: loginRequired}})函数 loginRequired (to, from, next) {如果(authService.authenticated()){下一个()} 别的 {下一个('/登录')}}

auth.js

import * as firebase from 'firebase'变量配置 = {//火力配置}firebase.initializeApp(config)var authService = {火力基地:火力基地,用户:空,认证(){如果(this.user == null){返回假} 别的 {返回 !this.user.isAnonymous}},设置用户(用户){this.user = 用户},登录(电子邮件,密码){返回 this.firebase.auth().signInWithEmailAndPassword(email, password).then(用户 => {this.setUser(用户)})},登出 () {this.firebase.auth().signOut().then(() => {console.log('注销完成')})}}firebase.auth().onAuthStateChanged(user => {authService.setUser(用户)})导出默认 authService

app.vue