如何在nuxt服务器init中为客户端设置axios令牌?

时间:2018-06-26 17:09:47

标签: axios nuxt.js

页面加载时,我正在尝试对用户进行身份验证。所以我有以下代码:

actions: {
      nuxtServerInit ({dispatch, commit, app}, context) {
        return new Promise((resolve, reject) => {
          const cookies = cparse.parse(context.req.headers.cookie || '')
          if (cookies.hasOwnProperty('x-access-token')) {
            app.$axios.setToken(cookies['x-access-token'], 'Bearer')
            api.auth.me2()
              .then(result => {
                commit('setUser', result.data.user)
                resolve(true)
              })
              .catch(error => {
                commit('resetUser')
                resetAuthToken()
                resolve(false)
              })
          } else {
            resetAuthToken()
            resolve(false)
          }
        })
      }

但是我遇到以下错误: 无法读取未定义的$ axios属性。我的代码有什么问题?

2 个答案:

答案 0 :(得分:1)

应用程序应来自上下文,例如从第二个论点。 所以你的代码应该是

context.app.$axios.setToken(cookies['x-access-token'], 'Bearer')

答案 1 :(得分:1)

另一种方式。您可以在第二个参数中传递app使得

nuxtServerInit ({dispatch, commit}, {app}) {

完整代码:

actions: {
  nuxtServerInit ({dispatch, commit}, {app}) {
    return new Promise((resolve, reject) => {
      const cookies = cparse.parse(context.req.headers.cookie || '')
      if (cookies.hasOwnProperty('x-access-token')) {
        app.$axios.setToken(cookies['x-access-token'], 'Bearer')
        api.auth.me2()
          .then(result => {
            commit('setUser', result.data.user)
            resolve(true)
          })
          .catch(error => {
            commit('resetUser')
            resetAuthToken()
            resolve(false)
          })
      } else {
        resetAuthToken()
        resolve(false)
      }
    })
  }
}