javascript - Nuxt Firebase 身份验证中间件
问题描述
我使用 Nuxt(vue) 作为前端,使用 Firestore 和身份验证作为后端。我让身份验证工作到一定程度,但我的问题是刷新浏览器会重置状态,因此我的中间件返回错误结果。
这里有一些代码片段:
中间件:
export default function ({store, redirect, route}) {
const userIsLoggedIn = !!store.state.currentUser;
if(!userIsLoggedIn) {
return redirect ('/')
}
}
插入:
import { auth } from '@/services/firebaseInit.js'
export default (context) => {
const { store } = context
return new Promise((resolve, reject) => {
auth.onAuthStateChanged(user => {
store.commit('setCurrentUser', user)
resolve()
})
})
}
现在这适用于运行应用程序,但是当有人刷新您需要身份验证的页面时,它不起作用并重定向到 /,现在我不知道如何解决这个问题,希望您能提供帮助,如果您需要更多代码,那么我会提供它。
编辑1:
async nuxtServerInit ({ commit }, { req }) {
let user = await firebase.auth().currentUser
commit('setCurrentUser', user)
}
解决方案
您需要在nuxtServerInit方法中初始化您的用户,否则您的中间件将在具有空用户的服务器上执行,因此会发生重定向。
您需要从 req 对象中获取用户数据。请参阅此 repo 以获取参考实现https://github.com/davidroyer/nuxt-ssr-firebase-auth.v2
推荐阅读
- c++ - 为什么数组中对象的析构函数在被另一个对象替换时不被调用?
- php - PHP - 获取不大于下一个数组值的数组值
- c# - WPF子菜单覆盖而不是展开
- groovy - 使用 groovy 脚本的 Jenkins 管道:执行 sh 命令时出错
- r - 为什么 R 中的扩展函数将 NA 添加到我的分组和汇总数据框中?
- android - 对特征/描述符寻址和 UUID 感到困惑
- reactjs - 世博会相机参考未被识别
- epplus - EPPlus 条件格式“AddExpression”问题
- c++ - Lambda 自身返回:这合法吗?
- vsto - 如果选中功能区复选框,如何在发送时更改主题行