当前位置:   article > 正文

uniapp封装request,设置请求头与token,前端判断token过期_uniapp 判断token过期

uniapp 判断token过期

common文件夹下新建request.js文件

// BASE_URL只是请求url的前半部分
import BASE_URL from './url.js'

// token默认过期时间
var expiredTime = +new Date() +1800*1000

// 不需要登录的接口
const noToken = [
	'/auth/login'
];

const request = function(options={}) {
	// 判断是否需要登录
	if (!(noToken.indexOf(options.url) >= 0)) {
		// 如果不需要登录
		// 判断token是否过期,过期强制登出,不过期,正常走下一步
		var expiredTimes = uni.getStorageSync('expiresIn') || expiredTime;
		var now = +new Date()
		if(expiredTimes - now < 0){
			// token失效,重新获取
			uni.reLaunch({
				url: '/pages/login/login',
			});
		}else{
			// token有效,不需要操作
			// 获取用户 token
			let userToken = uni.getStorageSync('Authorization')
			if (!userToken) {
				uni.reLaunch({
					url: '/pages/login/login',
				});
				return false;
			} else {
				// 将 token 放入请求头中
				options.headers['Authorization'] = 'Bearer ' + userToken
			}
		}
	}
	// 请求头信息
	options.headers = {
		'content-type': 'application/json;charset=utf-8'
	};
	
	// 如果调用接口不明确不显示 loading
	if (!options.hideLoading) {
		uni.showLoading({
			title: '加载中'
		});
	}
	return uni.request({
		url: BASE_URL + options.url,
		data: options.data,
		header: options.headers,
		method: options.method,
		success: (response) => {
			console.log(response,'response')
			if (!options.hideLoading) {
				uni.hideLoading();
			}
			// console.log(response.data)
			const result = response.data
			if (result.code == 500) {
				uni.showToast({
					icon: 'none',
					title: result.message,
					duration: 1500
				})
			} else {
				options.success(result)
			}
		},
		complete: () => {
			console.log(BASE_URL + options.url);
			uni.hideLoading();
		},
		fail: (error) => {
			console.log(error,'error')
			uni.hideLoading();
			if (error && error.response) {
				showError = error => {
					let errorMsg = ''
					switch (error.status) {
						case 400:
							errorMsg = '请求参数错误'
							break
						case 401:
							errorMsg = '未授权,请登录'
							break
						case 403:
							errorMsg = '跨域拒绝访问'
							break
						case 404:
							errorMsg = `请求地址出错: ${error.config.url}`
							break
						case 408:
							errorMsg = '请求超时'
							break
						case 500:
							errorMsg = '服务器内部错误'
							break
						case 501:
							errorMsg = '服务未实现'
							break
						case 502:
							errorMsg = '网关错误'
							break
						case 503:
							errorMsg = '服务不可用'
							break
						case 504:
							errorMsg = '网关超时'
							break
						case 505:
							errorMsg = 'HTTP版本不受支持'
							break
						default:
							errorMsg = error.msg
							break
					}
				
					uni.showToast({
						title: errorMsg,
						icon: 'none',
						duration: 1000,
						complete: function() {
							setTimeout(function() {
								uni.hideToast();
							}, 1000);
						}
					});
				}
				showError(error.response);
			}
		},
		timeout:30000
	})
}

export default request;
  • 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
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139

common文件夹下新建url.js文件

var BASE_URL = ""

if(process.env.NODE_ENV === 'production'){
    // 生产环境
    BASE_URL = 'http://' + window.location.host + '/washer'
}else{
    // 开发环境
    BASE_URL = 'http://' + window.location.host
}

export default BASE_URL
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

使用,login.js

import request from './request.js'

export function applogin(query) {
	return request({
		url: '/auth/login',
		method: 'POST',
		data: query.data,
		success:query.success
	})
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

app.vue 页面

import {applogin} from '@/common/login.js'
methods:{
bindLogin() {
	if (this.loginForm.username.length < 0) {
		uni.showToast({
			icon: 'none',
			title: '请输入账号'
		});
		return;
	}
	if (this.loginForm.password.length < 0) {
		uni.showToast({
			icon: 'none',
			title: '请输入密码'
		});
		return;
	}
	applogin({
		data:this.loginForm,
		success: (res) => {
			uni.setStorageSync("Authorization", res.data.access_token)
			uni.setStorageSync("expiresIn", new Date() + res.data.expires_in * 1000)
			// 进入首页
			this.toMain(this.account);
		},
		// 	uni.showToast({
		// 		icon: 'none',
		// 		title: '用户账号或密码不正确',
		// 	});
	})
	}
}
  • 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
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/231285
推荐阅读
相关标签
  

闽ICP备14008679号