【问题标题】:Nuxt Authentication API calls strategiesNuxt Authentication API 调用策略
【发布时间】:2020-10-10 12:19:24
【问题描述】:

我正在构建的当前应用中有一些不熟悉的 API 调用。它需要几个参数来设置以下 api。目前基于窗口中的子域,它获取 url 参数来创建第一个 API 调用。之后我使用 Vuex store 来存储组织数据的相关信息。

我目前正在尝试设置授权,但不幸的是,由于它位于 nuxt.config.js 内,我无法从 vuex 存储中动态添加数据。这是我设置的策略的示例。我目前正在使用本地默认策略,但不想让 url 请求动态:

nuxt.config.js

 /*
   ** Nuxt.js modules
   */
  modules: ['@nuxtjs/axios', '@nuxtjs/auth'],
  /*
   ** Axios configuration
   */
  axios: {
    baseURL: 'https://api.getconflux.com',
    headers: {
      common: {
        Accept: 'application/json, text/plain, */*'
      }
    }
  },
  /*
   ** Auth configuration
   */
  auth: {
    strategies: {
      local: {
        endpoints: {
          login: {
            method: 'post',
            propertyName: 'token'
          },
          logout: {
            url: '/logout',
            method: 'post'
          },
          user: {
            url: '/supporters/me',
            headers: {
              'organization-id': getters.companyId,
              // Authorization Bearer needs to be automatically called from login
            },
            method: 'get',
            propertyName: 'voter'
          },
        }
      }
    },
    customStrategy: {
      user: '~/schemas/user'
    },
    redirect: {
      home: '/'
    }
  }

我手动设置的当前登录名,在我的索引页面加载时没有我称之为的 url。这是第一次使用所需数据构建状态的 api 调用,之后我需要为后续的 api 调用调用。

为了使我的身份验证 api 请求正常工作,尤其是 user 策略中的 fetchUser() 调用,我需要从我的商店获取 companyId getter/state。我不知道如何在这里执行此操作?

有没有人知道我如何才能最好地实现它?

任何帮助将不胜感激!

提前致谢!

【问题讨论】:

    标签: vue.js axios vuex nuxtjs


    【解决方案1】:

    您可以在 nuxt.config.js 文件中禁用用户端点,然后在 Vuex 中手动调用该端点以获取用户详细信息,然后将其传递给 auth NuxtJS 模块的 setUser 方法。所以在你的nuxt.config.js 文件中,你应该有这个:

    /*
       ** Nuxt.js modules
       */
      modules: ['@nuxtjs/axios', '@nuxtjs/auth'],
      /*
       ** Axios configuration
       */
      axios: {
        baseURL: 'https://api.getconflux.com',
        headers: {
          common: {
            Accept: 'application/json, text/plain, */*'
          }
        }
      },
      /*
       ** Auth configuration
       */
      auth: {
        strategies: {
          local: {
            endpoints: {
              login: {
                method: 'post',
                propertyName: 'token'
              },
              logout: {
                url: '/logout',
                method: 'post'
              },
              user: false
        },
        customStrategy: {
          user: '~/schemas/user'
        },
        redirect: {
          home: '/'
        }
      }
    

    然后在您的商店中,您有一个操作(或一个突变,发出 API 请求以获取用户详细信息)。然后按照here 的描述调用setUser

    【讨论】:

    • 感谢开尔文!在这一点上我唯一挣扎的是弄清楚在哪里调用它。我设置了一个fetchUser 的操作,但每次用户访问应用程序时我都需要它在全局范围内运行。我想检查一下loggedIn 是否然后在我的商店中调用自定义fetchUser 操作。你知道我该怎么做吗?当我在策略中将user 设置为 false 时,它​​不会自动发出 api 请求,这正是我所需要的,只需附加参数即可。感谢您迄今为止的所有帮助!
    • 您可以在用户登录后触发 fetchUser 操作(这也是用户端点在后台执行的操作)。因此,当新用户成功登录时,您使用 fetchUser 操作发出 API 请求并使用 setUser 填充 auth 模块
    • 啊,好的,谢谢!但是即使在页面完全重新加载之后也会发生这种情况吗?因为目前这还没有发生。如果您重新加载页面,用户数据会丢失,但已登录状态为 true。或者,如果他们已经根据loggedIn布尔值登录,我是否需要单独获取用户数据?顺便说一下,我的登录端点最初包含用户数据,令牌以及用户数据。
    • 很好。我认为 setUser 使用本地存储存储值,因此您应该具有持久性。
    猜你喜欢
    • 1970-01-01
    • 2020-07-10
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    • 2020-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多