当前位置:   article > 正文

封装api时候token的处理_怎么封装带有api token的接口数据

怎么封装带有api token的接口数据

1.token是什么?

token像是一把钥匙,在点击登录的时候,后台会返回一个token。在调用其它接口的时候可能需要使用到token。

token是一段加密的字符串如:

 

2.在请求头中加入token

有些接口的访问,是需要携带token过去的,这个时候可以在请求拦截器里面进行添加, 这个时候当我们请求接口的时候就会将token携带过去。

  1. import Store from '@/store'
  2. if (Store.state.user.token) {
  3. config.headers.Authorization = `Bearer ${Store.state.user.token}`
  4. }

3.将token存储到Vuex中

Vuex刷新数据会进行丢失,这个使用就会用到本地存储的方式,用的较多的插件CookieJs。这样就很好地解决了刷新页面丢失token的问题。

(1)cookieJs的用法:

  1. import Cookies from 'js-cookie'
  2. const TokenKey = 'vue_admin_template_token'
  3. export function getToken() {
  4. return Cookies.get(TokenKey)
  5. }
  6. export function setToken(token) {
  7. return Cookies.set(TokenKey, token)
  8. }
  9. export function removeToken() {
  10. return Cookies.remove(TokenKey)
  11. }

(2)在store/modules/user.js模块下

  1. // 将token存储vuex中,vuex刷新就没了,解决刷新就没了的问题
  2. import { getToken, setToken } from '@/utils/auth'
  3. import { sysLogin } from '@/api/login'
  4. import { sysProfile, sysUser } from '@/api/user'
  5. import { Message } from 'element-ui'
  6. // import { sysProfile } from '@/api/user'
  7. const state = {
  8. // 有就取token 没有就为空
  9. token: getToken() || '',
  10. userInfo: ''
  11. }
  12. const mutations = {
  13. setToken(state, value) {
  14. state.token = value
  15. setToken(value)
  16. },
  17. setUserInfo(state, value) {
  18. state.userInfo = value
  19. }
  20. }
  21. const actions = {
  22. // 登录
  23. async toLogin(store, form) {
  24. const res = await sysLogin(form)
  25. Message.success('登录成功')
  26. store.commit('setToken', res.data)
  27. console.log(2)
  28. },
  29. // 获取用户信息
  30. async getUserInfo({ commit }) {
  31. const res = await sysProfile()
  32. console.log(res, '用户基本信息')
  33. // 获取用户头像
  34. const res2 = await sysUser(res.data.userId)
  35. console.log(res2, '用户头像')
  36. commit('setUserInfo', Object.assign({}, res.data, res2.data))
  37. }
  38. }
  39. const getters = {}
  40. export default {
  41. namespaced: true,
  42. state,
  43. mutations,
  44. getters,
  45. actions
  46. }

4.token失效的处理

token有一个时长,这个时长由后端进行设置,当出现401的时候token失效了,用户已经不能登录。

这个时候应该让用户返回到登录的页面, 并清除token,和用户的信息。

  1. (error) => {
  2. if (error.response && error.response.status === 401) {
  3. // 清除token
  4. // 清除用户信息
  5. Store.commit('user/setToken', '')
  6. Store.commit('user/setUserInfo', '')
  7. Router.push('/login')
  8. // 提示错误信息
  9. Message.error(error.response.data.message)
  10. // 跳转到登录页面进行传值
  11. Router.push('/login?redirect=' + window.location.href.split('#')[1])
  12. }
  13. return Promise.reject(error)
  14. }

服务器返回的状态码为401,通常情况来讲是因为权限不足的原因。

扩展小知识点:

常见的http状态码:

2xx  代表服务器响应成功

3xx  重定向

4xx  权限不足

500  可能是服务器的错误

5.用token用户就一定登录了吗?

答案是不一定,在登录的时候别人也可以对token进行伪造,但是有一个东西用户一定是登录了,那就是用户的信息。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号