vue3实现登录和token验证

该文章描述了前端登录过程中如何处理token,包括登录成功后将token存储在localStorage,请求头中添加token,以及接收到401状态码时清除token并重定向到登录页面。同时,文章还展示了对localStorage和sessionStorage的封装方法以及axios的请求拦截器设置。
摘要由CSDN通过智能技术生成

参考:[https://www.cnblogs.com/web-record/p/9876916.html]:

登录过程

  1. 登录成功返回 token
  2. 拿到token,将token存储到localStorage或store中,并跳转路由页面
  3. 跳转路由,就判断 localStroage 中有无 token
  4. 调后端接口,都要在请求头中加token
  5. 前端拿到状态码为401,就清除token信息并跳转到登录页面

localStroage封装

/**
 * 封装操作localstorage本地存储的方法
 */
export const storage = {
  // 存储
  set(key: string, value: any) {
    localStorage.setItem(key, JSON.stringify(value))
  },
  // 取出数据
  get<T>(key: string) {
    const value = localStorage.getItem(key)
    if (value && value !== 'undefined' && value !== 'null') {
      return <T>JSON.parse(value)
    }
    return key
  },
  // 删除数据
  remove(key: string) {
    localStorage.removeItem(key)
  }
}

/**
 * 封装操作sessionStorage本地存储的方法
 */
export const sessionStorage = {
  /**
   * 存储
   * @param key
   * @param value
   */
  set(key: string, value: any) {
    window.sessionStorage.setItem(key, JSON.stringify(value))
  },
  /**
   * 取出数据
   * @param key
   */
  get(key: string) {
    const value = window.sessionStorage.getItem(key)
    if (value && value !== 'undefined' && value !== 'null') {
      return JSON.parse(value)
    }
    return null
  },
  // 删除数据
  remove(key: string) {
    window.sessionStorage.removeItem(key)
  }
}

进行登录赋值

用户信息

配置用户默认标识和清除用户信息

//userInfo.ts
import { storage } from '@/utils/storage/storage'

/**
 * 用户信息
 */
export enum userInfo {
  ROLE = 'role',
  TOKEN = 'token',
  ID = 'id',
  NAME = 'name'
}
/**
 * 清除用户storage信息
 */
export const removeUserStorage = () => {
  storage.remove(userInfo.ROLE)
  storage.remove(userInfo.ID)
  storage.remove(userInfo.NAME)
  storage.remove(userInfo.TOKEN)
}
登录页面
import { storage } from '@/utils/storage/storage'

const state = reactive({
  name: '',
  pwd: ''
})
function login() {
  UserApi.login(state.name, state.pwd).then(res => {
    const ret = res.data
    removeUserStorage() //清除登录信息
    storage.set(userInfo.ROLE, ret.nickname) // 角色名
    storage.set(userInfo.TOKEN, `Bearer ${ret.token}`) // token
    storage.set(userInfo.ID, ret.id) // 用户主键
    storage.set(userInfo.NAME, ret.name) // 用户名
    message.success('登录成功')
    routers(rRouter.articleTable) //进行跳转
  })
}

axios加token

// 请求拦截器 
service.interceptors.request.use(
    (config: AxiosRequestConfig) => {
      const { method, data, headers } = config
      removePending(config)
      cancel.cancel_request && addPending(config)

      if (['post', 'put', 'delete'].includes(method as string)) {
        config.data = qs.parse(data) //序列化
      }
      // 若是有做鉴权token , 就给此处头部带上token 
      if (storage.get('token')) {
        if (headers) {
          headers.Authorization = storage.get('token') as string
        }
      }
      return config
    },
    error => {
      return Promise.reject(error.data.error.message)
    }
  )
Vue3 中实现 Token 校验可以分为以下步骤: 1. 用户在登录页面输入用户名和密码,向服务器发送请求进行登录操作。 2. 服务器验证用户的身份信息,如果验证通过,则返回一个 Token 给客户端。 3. 客户端将 Token 存储到本地,可以使用浏览器的 localStorage 或 sessionStorage 存储。 4. 在需要进行 Token 校验的请求中,客户端将 Token 携带在请求头中发送到服务器。 5. 服务器验证 Token 的有效性,如果验证通过,则返回请求的数据;否则,返回 401 或 403 状态码,表示未经授权的访问。 下面是一个示例代码: ```javascript // 登录操作 async function login(username, password) { const response = await axios.post('/api/login', { username, password }) const token = response.data.token localStorage.setItem('token', token) } // 发送需要 Token 校验的请求 async function fetchUser() { const token = localStorage.getItem('token') const response = await axios.get('/api/user', { headers: { Authorization: `Bearer ${token}` } }) return response.data } ``` 在上面的示例代码中,`login` 函数向服务器发送登录请求,如果验证通过,则将服务器返回的 Token 存储到本地的 localStorage 中。在 `fetchUser` 函数中,我们从 localStorage 中获取 Token,然后在请求头中携带 Token 发送请求到服务器进行验证。服务器通过验证后返回请求的数据,否则返回状态码 401 或 403。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值