在安装nuxtjs模块后,我一直收到此错误。我尝试了书中的所有技巧来修复它,但似乎没有任何效果。添加了更多信息。
[vuex] duplicate namespace auth/ for the namespaced module auth
我对此感到沮丧。
auth: {
plugins: [{ src: '~/plugins/axios', ssr: true }, '~/plugins/auth.js'],
vuex: {
namespace: 'auth'
},
strategies: {
local: {
endpoints: {
login: {
url: "login",
method: "post",
propertyName: "meta.token"
},
user: {
url: "me",
method: "get",
propertyName: false
},
logout: {
url: "logout",
method: "post"
},
redirect: {
login: "login",
logout: "/",
home: "/",
callback: "/"
},
watchLoggedIn: true,
rewriteRedirects: true
}
}
}
},
插件
plugins: [
{ src: "~/plugins/Maps.js", ssr: false },
{ src: "~/plugins/Typed.js", ssr: false },
{ src: "~/plugins/Animate.js", ssr: false },
{ src: "~/plugins/Counter.js", ssr: false },
{ src: "~plugins/Vimeo.js", ssr: false },
"~plugins/mixins/user.js",
"~plugins/mixins/validation.js",
],
auth.js << ----存储
export const getters = {
authenticated(state) {
return state.loggedIn;
},
user(state) {
return state.user;
}
};
export const state = () => ({
busy: false,
loggedIn: false,
strategy: "local",
user: false
});
以下是我目前拥有的代码。如果您需要查看其他文件,请随时告诉我。
答案 0 :(得分:1)
更新后,今天也遇到了同样的问题。解决:
将auth.js逻辑移至index.js并删除auth.js。
index.js:
export const getters = {
authenticated(state) {
return state.auth.loggedIn
},
user(state) {
return state.auth.user
}
}
如果您使用的是user.js mixin,请对其进行如下修改:
import Vue from 'vue'
import {mapGetters} from 'vuex'
const User = {
install(Vue, options) {
Vue.mixin({
computed: {
...mapGetters({
user: 'user',
authenticated: 'authenticated'
})
}
})
}
};
Vue.use(User);
答案 1 :(得分:1)
默认情况下,Nuxt使用 auth名称空间保留身份验证信息。如果您还在商店目录中创建文件auth.js
,则将与默认配置冲突。
"Panos"
提供的解决方案完全可以。但是,如果您真的有兴趣创建一个新模块来像您一样维护身份验证信息,则可以在商店目录中创建文件Auth.js
而不是auth.js
。不会与默认名称空间冲突。
然后,您可以从nuxt身份验证模块返回身份验证信息,如下所示。在这里,我使用rootState
export const getters = {
authenticated(state, getters, rootState) {
return rootState.auth.loggedIn;
},
user(state, getters, rootState) {
return rootState.auth.user;
}
};
此外,如果您使用的是user.js mixin,请对其进行如下修改:
import Vue from "vue";
import { mapGetters } from "vuex";
const User = {
install(Vue, options) {
Vue.mixin({
computed: {
...mapGetters("Auth", {
user: "user",
authenticated: "authenticated"
})
}
});
}
};
Vue.use(User);
答案 2 :(得分:0)
您的商店文件夹中可能有一个名为“ auth.js”的文件,并且没有在nuxt.config.js文件中显式设置vuex.namespace选项。
从文档中:
store目录中的每个.js文件都转换为命名空间模块(索引是根模块)。
因此,“ auth”会自动成为名称空间。
问题是“ auth”也是用于保持状态的默认Vuex存储名称空间,因为如果未明确设置nuxt.config.js文件中的“ vuex.namespace”选项,默认情况下它是“ auth”。那就是重复的地方。
要解决此问题,请将store / auth.js更改为store / authentication.js之类的内容,或者将nuxt.config.js文件中的vuex.namespace选项更改为除“ auth”之外的其他内容,否则用作默认值。