【发布时间】:2023-02-24 17:48:32
【问题描述】:
我需要使用 cookie 来存储 vue 3 中登录用户的访问令牌。 为此,我使用了“vue-cookies”npm 包。
它在组件内部完美运行 - 但我需要在组件外部获取 cookie。
这是我的 vue 3 项目中的 main.ts:
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import VueCookies from 'vue-cookies'
import router from './router'
import App from './App.vue'
import './assets/main.css'
const app = createApp(App)
app.use(createPinia())
app.use(router)
app.use(VueCookies, { expires: '15m' })
app.mount('#app')
在“LoginItem.vue”组件中,我有以下代码,标签内有 $cookies:
// ...
const $cookies = inject<VueCookies>('$cookies')
const token = ref('')
// ...
onMounted(() => {
const accessToken = $cookies?.get('accessToken')
if (accessToken) {
token.value = accessToken
}
})
上面的代码成功运行。但我想创建一个全局模块/文件/方式来处理使用访问令牌的常见操作。
因此,我创建了文件“auth.ts”,试图使用与组件相同的逻辑,但不幸的是它没有工作:
import { inject } from 'vue'
import type { VueCookies } from 'vue-cookies'
const $cookies = inject<VueCookies>('$cookies')
export const getToken = (): string => {
return $cookies?.get('accessToken')
}
$cookie 始终未定义。
我该如何解决?
此外,在 Vue 3 范例中,建议以我正在尝试的方式进行此访问令牌管理,或者我应该寻求其他方法吗?
【问题讨论】:
-
除了 comp 设置,在任何地方使用
inject都是错误的。框架无法确定注入什么价值,否则。在这里使用它有什么意义?您可以导入它并按原样使用,对于具有 DI 或循环依赖的特殊情况,需要提供/注入 -
@EstusFlask 抱歉,我还在学习 vue3,我还在探索如何完成这些事情。我只是注射看看是否有效
-
没问题,我发布了一个答案以防有帮助
标签: typescript vue.js cookies