我希望在我的Nuxt项目中使用$auth,特别是在一个axios插件中。
下面是我的代码:
- 插件/api. js**
export default function ({ $axios }, inject) {
const api = $axios.create({
headers: {
common: {
Accept: 'text/plain, */*',
},
},
})
// Set baseURL to something different
api.setBaseURL('http://localhost:4100/')
// Inject to context as $api
inject('api', api)
}
现在,当我尝试使用@nuxtjs/auth-next包中的$auth时,问题出现了。
如文件所述:
这个模块全局注入$auth示例,意味着你可以使用这个. $auth在任何地方访问它。对于插件、asyncData、fetch、nuxtServerInit和中间件,你可以从上下文. $auth访问它。
我尝试了以下方法:
1.这将导致$auth未定义
导出默认函数({$axios,$auth},注入){
1.这个就在附近
导出默认函数({$axios,app},inject){console. log(app)//此函数将$auth记录在记录的对象console. log(app. $auth)中//我不明白为什么此函数返回undefined
我在这里的主要目标是利用this.$auth.strategy.token.get()
并将其传递给(当然,如果令牌存在的话)使用这个. $api发出的每个请求的头
我一直在寻找类似的问题和答案,但没有一个能帮助我解决这个问题,我可以只在每次写这个. $api时添加令牌,但这会增加不必要的代码。
提前感谢所有人的时间和帮助。
- 编辑:**
好了,现在我做了一个测试。下一个代码实际上是正确地记录$auth对象,似乎需要一些时间才能使其工作,但现在我担心使用setTimeout可能会导致错误,因为我不能确切地知道$auth可用需要多少时间。
export default function ({ $axios, app }, inject) {
setTimeout(() => {
console.log('After timeout', app.$auth)
}, 50)
- 编辑2:**
所以现在我做了更多的测试,使用0毫秒代替50毫秒也可以,所以我现在将使用0毫秒的setTimeout,我希望任何人在使用setTimeout之前找到更好的解决方案或解释为什么$auth不可用,以便我可以决定如何处理我的代码。
- 编辑3:**
在尝试将我之前的所有代码都 Package 在setTimeout中之后,我注意到代码失败了,所以这不是一个解决方案。
2条答案
按热度按时间2izufjch1#
我已经找到了一个解决方案,所以我会把它贴出来,这样每个人都可以在未来有同样的问题可以解决它。
事实证明,我可以很容易地解决它使用拦截器。
u4dcyp6a2#
Nuxt Auth本身也为这个问题提供了一个解决方案:https://auth.nuxtjs.org/recipes/extend/