1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
axios.interceptors.response.use( (response: AxiosResponse): any => checkResponseCode(response), function (error) { return Promise.reject(error); } );
function checkResponseCode(response) { const { status, data } = response; switch (true) { case status === HTTP_STATUS_CODES.UNAUTHORIZED: { const { url = "/login" } = data || {}; window.location.href = window.location.origin + url; return { status: RESPONSE_STATUS.NOT_LOGGED_IN, url }; } default: { return { status: RESPONSE_STATUS.SUCCESS, page: data.page, data }; } } }
到这里就可实现一个简单的登录验证啦! 我这里url默认了 '/login' 具体情况以自己项目为主。
其中 HTTP_STATUS_CODES 、RESPONSE_STATUS 均为枚举。
const HTTP_STATUS_CODES = { BAD_REQUEST: 400, UNAUTHORIZED: 401, FORBIDDEN: 403, NOT_FOUND: 404, REQUEST_TIME_OUT: 408, CONFLICT: 409, UNPROCESSABLE_ENTITY: 422, INTERNAL_SERVER_ERROR: 500, GATEWAY_TIMEOUT: 504, };
enum RESPONSE_STATUS { "ERROR" = "ERROR", "INVALID" = "INVALID", "REQUEST" = "REQUEST", "SUCCESS" = "SUCCESS", "LOADED" = "LOADED", "FAILURE" = "FAILURE", "LOGOUT" = "LOGOUT", "NOT_FOUND" = "NOT_FOUND", "FIELD_INVALID" = "FIELD_INVALID", "NOT_LOGGED_IN" = "NOT_LOGGED_IN", "NO_ACCESS" = "NO_ACCESS", "EXCEPTION" = "EXCEPTION", "REDIRECT" = "REDIRECT", "INTERNAL_SERVER_ERROR" = "INTERNAL_SERVER_ERROR", "RESOURCE_LOAD_ERROR" = "RESOURCE_LOAD_ERROR", }
|