diff --git a/package.json b/package.json index 6e32f13..85e5383 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,6 @@ "element-ui": "^2.14.0", "file-saver": "^2.0.2", "js-cookie": "^2.2.1", - "js-md5": "^0.7.3", "nprogress": "^0.2.0", "vue": "^2.6.12", "vue-clipboard2": "^0.3.1", diff --git a/src/api/index.js b/src/api/index.js index 9b2616d..a344f40 100644 --- a/src/api/index.js +++ b/src/api/index.js @@ -33,45 +33,14 @@ api.interceptors.request.use( if (store.getters['user/isLogin']) { request.headers.token = store.state.user.token } - if (request.method == 'post') { - if (request.data instanceof FormData) { - if (store.getters['user/isLogin']) { - // 如果是 FormData 类型(上传图片) - request.data.append('token', store.state.user.token) - } - } else { - // 带上 token - if (request.data == undefined) { - request.data = {} - } - // 参数验签 - let timestamp = new Date().getTime() - request.data.timestamp = '' + timestamp - let sign = signMd5Utils.getSign(request.url, request.data) - request.data.sign = sign - } - } else if (request.method === 'get') { - // 带上 token - if (request.params == undefined) { - request.params = {} - } - let timestamp = new Date().getTime() - // get 请求所有参数转成string类型 用于签名计算 - request.params.timestamp = '' + timestamp - let strParams = JSON.stringify(request.params, function(key, value) { - if (key) { - if (value == undefined || value == null) { - return undefined - } - return '' + value - } - - return value - }) - console.log(JSON.stringify(request.params) + ':str' + strParams) - let sign = signMd5Utils.getSign(request.url, JSON.parse(strParams)) - request.params.sign = sign + // 签名验证 + if (request.params == undefined) { + request.params = {} } + let timestamp = new Date().getTime() + request.params.timestamp = '' + timestamp + let sign = signMd5Utils.getSign(request.url, request, timestamp) + request.params.sign = sign return request } ) @@ -86,16 +55,18 @@ api.interceptors.response.use( * 请求出错时 msg 会返回错误信息 * 则代码如下 */ + let errCodes = [500, 405, 403] const res = response.data if (res.code === 200) { return Promise.resolve(res) - } else if (res.code === 500 || res.code == 403) { + } else if (errCodes.includes(res.code)) { // 这里做错误提示,如果使用了 element ui 则可以使用 Message 进行提示 Message({ message: res.msg || 'Error', type: 'error', duration: 5 * 1000 }) + return Promise.reject(res) } else if (res.code === 401) { // 有一个接口进入该方法 其他接口则不在进入 let reLogin = store.getters['global/isReLogin'] @@ -111,6 +82,7 @@ api.interceptors.response.use( }) }) } + return Promise.reject(res) } return Promise.resolve(res) }, diff --git a/src/store/modules/user.js b/src/store/modules/user.js index e3dacf9..a59c359 100644 --- a/src/store/modules/user.js +++ b/src/store/modules/user.js @@ -26,10 +26,7 @@ const actions = { }) }, logout(context) { - context.commit('setData', { - token: null, - userInfo: null - }) + context.commit('delData') } } @@ -39,6 +36,10 @@ const mutations = { localStorage.setItem('userInfo', JSON.stringify(data.userInfo)) state.token = data.token state.userInfo = JSON.stringify(data.userInfo) + }, + delData() { + localStorage.removeItem('token') + localStorage.removeItem('userInfo') } } diff --git a/src/utils/sign.js b/src/utils/sign.js index 573866b..0433795 100644 --- a/src/utils/sign.js +++ b/src/utils/sign.js @@ -1,7 +1,8 @@ /* eslint-disable no-alert */ -import md5 from 'js-md5' +import CryptoJS from 'crypto-js' import constants from './constants' import _ from 'lodash' + export default class sign { /** * json参数升序 @@ -23,17 +24,34 @@ export default class sign { return sortObj } + /** * @param url 请求的url,应该包含请求参数(url的?后面的参数) * @param requestParams 请求参数(POST的JSON参数) * @returns {string} 获取签名 */ - static getSign(url, requestParams) { + static getSign(url, request, timestamp) { + let requestParams = {} + if (request.params) { + // get 请求所有参数转成string类型 用于签名计算 + requestParams = JSON.parse(JSON.stringify(request.params, function(key, value) { + if (key) { + if (value == undefined || value == null) { + return undefined + } + return '' + value + } + return value + })) + } + let dataParams = request.data ? request.data : {} let urlParams = this.parseQueryString(url) let jsonObj = _.merge(urlParams, requestParams) + jsonObj = _.merge(jsonObj, dataParams) let requestBody = this.sortAsc(jsonObj) console.log(constants.signSecret + JSON.stringify(requestBody)) - return md5(constants.signSecret + JSON.stringify(requestBody)).toLowerCase() + console.log(CryptoJS.MD5(constants.signSecret + JSON.stringify(requestBody)).toString().toLowerCase()) + return CryptoJS.MD5(constants.signSecret + JSON.stringify(requestBody)).toString().toLowerCase() } /** diff --git a/src/views/account/ForgetPwd.vue b/src/views/account/ForgetPwd.vue index 6a9f363..531d902 100644 --- a/src/views/account/ForgetPwd.vue +++ b/src/views/account/ForgetPwd.vue @@ -26,7 +26,7 @@ - + diff --git a/src/views/account/login.vue b/src/views/account/login.vue index ea8e13d..886aec5 100644 --- a/src/views/account/login.vue +++ b/src/views/account/login.vue @@ -188,14 +188,26 @@ +