ts封装localStorage,sessionStorage,在vue3中使用

我定义了一个 Cache 类,它可以通过构造函数选择使用 localStorage 或 sessionStorage 存储缓存数据。setCache 方法可以将一个 key-value 对存储到缓存中,getCache 方法可以根据给定的 key 获取对应的 value,removeCache 方法可以删除一个缓存项,clear 方法可以清空存储的所有缓存数据。

通过 localCache 和 sessionCache 这两个实例,我们可以创建 localStorage 和 sessionStorage 的缓存实例,并通过它们来存储和获取数据。这种设计可以使我们在不同的存储场景下使用相同的 API,降低开发难度,并且很容易进行扩展,比如可以增加一个 RedisCache 类来支持使用 Redis 进行缓存

enum CacheType {
  Local,
  Session
}

class Cache {
  storage: Storage

  constructor(type: CacheType) {
    this.storage = type === CacheType.Local ? localStorage : sessionStorage
  }

  setCache(key: string, value: any) {
    if (value) {
      this.storage.setItem(key, JSON.stringify(value))
    }
  }

  getCache(key: string) {
    const value = this.storage.getItem(key)
    if (value) {
      return JSON.parse(value)
    }
  }

  removeCache(key: string) {
    this.storage.removeItem(key)
  }

  clear() {
    this.storage.clear()
  }
}

const localCache = new Cache(CacheType.Local)
const sessionCache = new Cache(CacheType.Session)

export { localCache, sessionCache }

这里 store 用于管理登录相关的状态和行为。

在 state 中,定义了三个状态属性:idtoken 和 nameid 初始值为空字符串,token 的初始值是通过调用 localCache.getCache('token') 来获取的本地缓存值,如果不存在缓存值,则取空字符串。name 初始化为一个空字符串。

在 actions 中,定义了一个异步的 loginAccountAction 方法,用于处理账号登录的逻辑。在这个方法中,首先调用了 accountLoginRequest 方法来进行账号登录并获取登录结果,然后通过 loginResult.data 来获取返回的登录信息,包括 idtoken 和 name。接着,将这些信息分别赋值给 store 中的对应状态属性。

最后,通过调用 localCache.setCache('token', this.token) 将登录成功后的 token 保存到本地缓存中,以便在页面刷新后仍然可以获取到登录状态。

总的来说,这段代码实现了登录的逻辑,通过 Vuex 管理登录相关的状态,将登录后的 token 保存到本地缓存中。

const useLoginStore = defineStore('login', {
  state: () => ({
    id: '',
    token: localCache.getCache('token') ?? '',
    name: ''
  }),
  actions: {
    async loginAccountAction(account: IAccount) {
      // 账号登录,获取token等信息
      const loginResult = await accountLoginRequest(account)
      // console.log(loginResult)
      this.id = loginResult.data.id
      this.token = loginResult.data.token
      this.name = loginResult.data.name

      // 进行本地缓存
      localCache.setCache('token', this.token)
    }
  }
})

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3 登录成功后获取 Session 的方式可以通过以下步骤实现: 1. 在登录页面向后端发送登录请求,将用户名和密码作为请求参数传递给后端。 2. 后端验证用户名和密码,如果验证通过,则生成一个 Session ID,并将 Session ID 保存在 Redis、MySQL 或者其他数据存储,并将 Session ID 返回给前端。 3. 前端在接收到后端返回的 Session ID 后,可以将其存储在本地的 Local Storage 或者 Session Storage 。 4. 在之后的请求前端需要在请求头携带 Session ID,后端根据 Session ID 来识别用户的身份信息。 下面是一个简单的示例代码: ```vue <template> <div> <input v-model="username"> <input v-model="password"> <button @click="login">登录</button> </div> </template> <script> export default { data() { return { username: '', password: '' } }, methods: { login() { // 向后端发送登录请求 this.$axios.post('/login', { username: this.username, password: this.password }).then(response => { // 登录成功,将 Session ID 存储到本地 localStorage.setItem('sessionId', response.data.sessionId) }).catch(error => { // 登录失败,处理错误信息 }) } } } </script> ``` 在之后的请求,可以在请求头加入 Session ID,例如: ```javascript import axios from 'axios' // 设置请求拦截器,在请求头加入 Session ID axios.interceptors.request.use(config => { const sessionId = localStorage.getItem('sessionId') if (sessionId) { config.headers['sessionId'] = sessionId } return config }) ``` 在后端,需要根据请求头的 Session ID 来识别用户的身份信息,例如: ```java @RestController public class UserController { @Autowired private UserService userService; @GetMapping("/user") public User getUser(@RequestHeader("sessionId") String sessionId) { // 根据 Session ID 获取用户信息 User user = userService.getUserBySessionId(sessionId); return user; } } ``` 需要注意的是,为了保证 Session 的安全性,需要在后端进行 Session 的有效期、Session ID 的生成和加密等方面进行处理。同时,需要注意防止 CSRF、XSS 等安全问题的发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值