auth.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import Vue from 'vue'
  2. import FingerprintJS from '@fingerprintjs/fingerprintjs'
  3. const USER_ACCESS_TOKEN = 'ACCESS-TOKEN'
  4. const USER_REFRESH_TOKEN = 'REFRESH-TOKEN'
  5. const USER_INFO = 'TFAPP-USERINFO'
  6. /**
  7. * 设置已登入用户的 token
  8. *
  9. * @param {Object} userToken
  10. */
  11. export function setUserToken(userToken) {
  12. const accessToken = userToken.accessToken
  13. const accessExpireAt = userToken.accessExpireAt
  14. localStorage.setItem(USER_ACCESS_TOKEN,
  15. JSON.stringify({
  16. accessToken,
  17. accessExpireAt
  18. })
  19. )
  20. const refreshToken = userToken.refreshToken
  21. const refreshExpireAt = userToken.refreshExpireAt
  22. localStorage.setItem(USER_REFRESH_TOKEN,
  23. JSON.stringify({
  24. refreshToken,
  25. refreshExpireAt
  26. })
  27. )
  28. }
  29. /**
  30. * 获取已登入用户的访问令牌
  31. */
  32. export function getAccessToken() {
  33. const result = localStorage.getItem(USER_ACCESS_TOKEN)
  34. if (result !== undefined && result !== null) {
  35. const token = JSON.parse(result)
  36. const t = new Date().getTime()
  37. if (token.accessExpireAt > t) {
  38. return token.accessToken
  39. }
  40. localStorage.removeItem(USER_ACCESS_TOKEN)
  41. }
  42. return null
  43. }
  44. /**
  45. * 获取已登入的刷新令牌
  46. */
  47. export function getRefreshToken() {
  48. const result = localStorage.getItem(USER_REFRESH_TOKEN)
  49. if (result !== undefined && result !== null) {
  50. const token = JSON.parse(result)
  51. const t = new Date().getTime()
  52. if (token.refreshExpireAt > t) {
  53. return token.refreshToken
  54. }
  55. localStorage.removeItem(USER_REFRESH_TOKEN)
  56. }
  57. return null
  58. }
  59. /**
  60. * 设置已登入用户信息
  61. *
  62. * @param {Object} data
  63. */
  64. export function setAuthedUser(data) {
  65. localStorage.setItem(USER_INFO, JSON.stringify(data))
  66. }
  67. /**
  68. * 更新已登入用户信息
  69. *
  70. * @param {Object} data
  71. */
  72. export function updateAuthedUser(data) {
  73. localStorage.setItem(USER_INFO, JSON.stringify(data))
  74. }
  75. /**
  76. * 获取已登入用户信息
  77. */
  78. export function getAuthedUser() {
  79. const data = localStorage.getItem(USER_INFO) || null
  80. return data !== null ? JSON.parse(data) : null
  81. }
  82. /**
  83. * 删除已登入用户相关缓存信息
  84. */
  85. export function removeAll() {
  86. localStorage.removeItem(USER_ACCESS_TOKEN)
  87. localStorage.removeItem(USER_REFRESH_TOKEN)
  88. localStorage.removeItem(USER_INFO)
  89. }
  90. /**
  91. * 浏览器指纹
  92. */
  93. export async function getBrowserFingerprint() {
  94. // 初始化FingerprintJS
  95. const fp = await FingerprintJS.load()
  96. // 获取访问者的指纹
  97. const result = await fp.get()
  98. const {
  99. plugins,
  100. ...components
  101. } = result.components
  102. const extendedComponents = {
  103. ...components
  104. }
  105. // const deviceInfo = JSON.stringify(extendedComponents)
  106. const fingerprintId = FingerprintJS.hashComponents(extendedComponents)
  107. Vue.$cookies.set('fp', fingerprintId, -1)
  108. }