123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- /**
- * Created by Andste on 2018/5/7.
- */
- import Vue from 'vue'
- import Storage from './storage'
- import request, { API } from '@/utils/request'
- import store from '@/store'
- /**
- * 检查token:
- * 1. user/accessToken/refreshToken都不存在。
- * 表示用户没有登录,不能放行需要登录的API
- * 2. 不存在accessToken,但是user/refreshToken存在。
- * 表示accessToken过期,需要重新获取accessToken。
- * 如果重新获取accessToken返回token失效错误,说明已被登出。
- * @param options
- * @returns {Promise<any>}
- */
- export default function checkToken(options) {
- // uid
- const uid = Storage.getItem('uid')
- // 访问Token
- const accessToken = Storage.getItem('access_token')
- // 刷新Token
- const refreshToken = Storage.getItem('refresh_token')
- //刷新token过期时间
- const refreshTokenTimeout = Storage.getItem('refresh_token_timeout')
- //access_token过期时间
- const accessTokenTimeout = Storage.getItem('access_token_timeout')
- const uuid = Storage.getItem('uuid')
- //当前时间戳
- const now = Math.round(new Date() / 1000)
- // 返回异步方法
- return new Promise((resolve, reject) => {
- /**
- * 如果accessToken、uid、refreshToken都存在。
- * 说明必要条件都存在,可以直接通过,并且不需要后续操作。
- */
- var checkLock
- // console.log('accessTokenout', !accessTokenTimeout || accessTokenTimeout <= now)
- if (accessToken && uid && refreshToken && accessTokenTimeout && now < accessTokenTimeout) {
- resolve()
- return
- }
- /**
- * 如果需要Token,但是refreshToken或者uid没有。
- * 说明登录已失效、或者cookie有问题,需要重新登录。
- */
- //刷新token失效了,需要重新登陆获取
- if (!refreshTokenTimeout || refreshTokenTimeout < now) { //刷新token失效,直接退出
- // uni.redirectTo({
- // url: '/pages/login/index'
- // })
- resolve()
- return
- }
- if (!accessTokenTimeout || accessTokenTimeout <= now) //access_token 失效 刷新token
- {
- console.log('refreshtoken')
- const param = {
- 'refresh_token': refreshToken
- }
- uni.request({
- url: `${API.buyer}/passport/token`,
- method: 'POST',
- header: {
- 'Content-Type': 'application/x-www-form-urlencoded',
- 'uuid': uuid
- },
- data: param,
- success(res) {
- console.log(res)
- const final = {}
- const {
- accessToken,
- refreshToken,
- accessTokenTimeout,
- refreshTokenTimeout
- } = res.data.accessToken ? res.data : final
- // 刷新成功 更新凭证数据
- console.log('refreshToken', accessToken)
- if (accessToken && refreshToken && accessTokenTimeout) {
- const now = Math.round(new Date() / 1000)
- store.dispatch('setAccessTokenAction', accessToken)
- store.dispatch('setRefreshTokenAction', refreshToken)
- Storage.setItem('access_token_timeout', now + accessTokenTimeout - 60)
- Storage.setItem('refresh_token_timeout', now + refreshTokenTimeout - 60)
- resolve()
- } else { //刷新返回数据错误
- Storage.removeItem('access_token_timeout')
- Storage.removeItem('refresh_token_timeout')
- Storage.removeItem('access_token')
- Storage.removeItem('refresh_token')
- uni.redirectTo({
- url: '/pages/login/index'
- })
- return
- }
- },
- fail(err) { //刷新token失败
- Storage.removeItem('access_token_timeout')
- Storage.removeItem('refresh_token_timeout')
- Storage.removeItem('access_token')
- Storage.removeItem('refresh_token')
- uni.redirectTo({
- url: '/pages/login/index'
- })
- return
- }
- })
- } else { //accessToken 有效
- resolve()
- }
- })
- }
|