Nuxt.js集成Firebase登录时Vuex报unknown action type错误
问题原因与修复方案
Vuex: unknown action type报错由以下代码错误导致,按说明修改即可解决:
- 核心错误:Vuex模块导出字段名不符合规范。Nuxt自动注册store模块时,只会识别固定命名的导出项:修改状态的方法集合必须导出为
mutations(复数),异步操作集合必须导出为actions(复数)。你当前代码中写的是单数形式mutation、action,对应的方法不会被注册到store实例中,自然找不到对应的login action。 - 传参错误:
store.dispatch方法仅接收三个参数,第一个为action路径,第二个为传给action的载荷(payload),第三个为调用配置(如{ root: true })。你当前代码将邮箱、密码作为两个独立参数传入,密码会被误识别为配置项,即使action注册成功也无法拿到正确的登录参数。 - 路径说明:你之前尝试的
namespace/users路径写法是错误的,Nuxt的命名空间和store目录结构完全对应,store/users/index.js对应的模块命名空间就是users,你原本写的users/login路径格式是正确的,不需要额外加前缀。
修正后代码
store/users/index.js
import { signInWithEmailAndPassword, signOut } from "firebase/auth"; import { auth } from "@/plugins/firebase"; export const state = () => ({ user: null }) // 修正字段名为复数mutations export const mutations = { SET_USER(state, user) { state.user = user }, SIGNOUT_USER(state) { state.user = null } } // 修正字段名为复数actions export const actions = { async login ({ commit }, account) { const {email, password} = account try { await signInWithEmailAndPassword(auth, email, password) } catch(error) { console.log(error) } commit('SET_USER', auth.currentUser) this.$router.push('/admin') }, async logout ({commit}) { await signOut(auth) commit('SIGNOUT_USER') this.$router.push('/') } }
login.vue 方法部分修正
methods: { login () { // 修正:将邮箱、密码封装为一个对象作为payload传入 this.$store.dispatch("users/login", { email: this.email, password: this.password }); } }
内容的提问来源于stack exchange,提问作者Emrah
相关产品推荐
相关产品推荐

