未定义Nuxt auth getToken和异步

时间:2019-07-06 14:38:52

标签: javascript vue.js nuxt

我正在尝试从用户那里获取一些数据,并且需要在调用中传递承载令牌。

async asyncData () {
    let response = await axios.get('dataURL', {}, { headers: {"Authorization" : `Bearer ${this.$auth.getToken('local')}`} })
  },

但这是行不通的,它总是说$ auth是未定义的,而在模板中,我可以轻松地输出任何$ auth属性...

如何在异步中获取承载令牌?

2 个答案:

答案 0 :(得分:0)

也许您可以在通话后尝试传递上下文(this)?
例如:

await axios.get('dataURL', {}, { headers: {"Authorization" : `Bearer ${this.$auth.getToken('local')}`} }),this;

答案 1 :(得分:0)

@Titus对“这”是问题是正确的。您在asyncData中没有“ this”可用,因为:

  

您无法通过此内部访问组件实例   asyncData,因为它是在启动组件之前被调用的。

您确实可以访问“上下文”,因此您可以使用该上下文调用auth模块:

async asyncData (context) {
    let response = await axios.get('dataURL', {}, { headers: {"Authorization" : `Bearer ${context.app.$auth.getToken('local')}`} })
  },

nuxtjs / Auth docs

但是您仍然没有使用asyncData,这是因为您没有返回任何可以与数据合并的内容,因此您可能想要尝试以下操作:

async asyncData (context) {
    let { response } = await axios.get('dataURL', {}, { headers: {"Authorization" : `Bearer ${context.app.$auth.getToken('local')}`} })
    return { token: response }
  },

话虽如此,我真的不明白为什么要在组件中获取令牌。当然,最好通过商店中的nuxtServerInit全局获取它。