web-dev-qa-db-ja.com

名前空間モジュールauthの名前空間auth /の複製

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
});

以下は私が現在持っているコードです。他のファイルを表示する必要がある場合は、遠慮なくお知らせください。

https://www.youtube.com/watch?v=FojAfwueTLc

2
manshu

更新後、今日同じ問題に直面しました。解決する:

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ミックスインを使用している場合は、次のように修正します。

import Vue from 'vue'
import {mapGetters} from 'vuex'

    const User = {
        install(Vue, options) {
            Vue.mixin({
                computed: {
                    ...mapGetters({
                        user: 'user',
                        authenticated: 'authenticated'
                    })
                }
            })
        }
    };

    Vue.use(User);
3
Panos

「auth.js」というファイルがストアフォルダー内にある可能性があり、nuxt.config.jsファイルでvuex.namespaceオプションを明示的に設定していません。

ドキュメントから:

ストアディレクトリ内のすべての.jsファイルは、名前空間モジュールとして変換されます(インデックスはルートモジュールです)。

つまり、「auth」は自動的に名前空間になります。

問題は、「auth」が状態を維持するためのデフォルトのVuexストアのネームスペースでもあることです。明示的に何も設定されていない場合、nuxt.config.jsファイルの「vuex.namespace」オプションはデフォルトで「auth」であるためです。それが重複が出てくるところです。

これを解決するには、store/auth.jsをstore/authentication.jsのような別のものに変更するか、nuxt.config.jsファイルのvuex.namespaceオプションを「auth」以外に変更してください。そうしないと、デフォルトとして使用されます。

2