uniapp封装request函数 实现唯一登录,一个账号同时只能登陆一个设备

2023-11-17

今天有空 ,所以又来总结自己的工作啦~ 今天写如何封装request请求并且 在每个请求这里通过设置token实现唯一登录的问题,一个账号同一时间只能登陆一个账号

先上封装的request代码啦~~~ 这个是借鉴网上的资料写的 我会把博主的链接放在本文最后,感兴趣的可以去看下啦
1.在项目根目录下建一个common 文件 然后写http.js ,如下图
目录
2.然后在main.js文件中引入

import http from './common/http.js'
Vue.prototype.$HTTP = http

3.http.js文件内容

// created by wangyong for uni-app request 2019.11.22

const process= 'development';
var baseURL = 'http://www.XXXXX.XXXXX.com'; //这里写接口名称就好啦
if(process === 'development'){
    console.log('开发环境/测试环境')
    // baseURL = '/api';  //这里是做的代理服务器操作 另一篇文章有写哦
    //如果不做代理可以直接删掉
}else{
    console.log('生产环境/正式环境')
	baseURL = 'http://www.XXXX.XXXXX.com';
	// baseURL = '/formalAPI';
}

const http = (options) => {
    return new Promise((resolve, reject) => {
        uni.showLoading({
            title: '加载中...',
            mask: options.load || false // 默认遮罩出现可以继续操作
        });
        try{
        // 从本地获取token 
			var newtoken=""
			uni.getStorage({
				key: 'token',
				success: function(res) {
					console.log(res.data);
					newtoken = res.data
				}
			});
            uni.request({
                url: (options.baseURL || baseURL) + options.url,
                method: options.method || 'POST', // 默认为POST请求
                data: options.data, //请求超时在manifest.json配置
                header: {
                    'token': newtoken,
                    'Content-Type': options.header == 'form' ? 'application/x-www-form-urlencoded' : 'application/json'
                },
                success: res => {
					
					if(res.data.code==403){
						console.log(res.data.msg)
						// uni.showToast({
						// 	icon:'none',
						// 	title:'账号在别处登录!'
						// })
						//返回403代表异地登录 退出登录 并将token置为空
						let outs = setTimeout(function(){
							uni.navigateTo({
								url: '/pages/login/login'
							});
						},1000)
						uni.showLoading({
						    title: 'res.data.msg',
						    mask: options.load || false // 默认遮罩出现可以继续操作
						});
						uni.setStorage({
							key:"token",
							data:""
						})
					}
                    resolve(res)
				
                },
                fail: (err) => {
                    reject(err.data);
                    console.log(err);
                    uni.showToast({
                        title: '请检查网络连接',
                        icon: 'none'
                    })
                    /*错误码处理
                    let code = err.data.code; 
                    switch (code) {
                        case 1000:
                            break;
                        default:
                            break;
                    } */
                },
                complete: () => {
                    uni.hideLoading();
                }
            });
        }catch(e){
            uni.hideLoading();
            uni.showToast({
                title: '服务端异常',
                icon: 'none'
            })
        }
        
    })
}

export default http

使用方法:

this.$HTTP({
				url:'/index.php/Task/TaskHandle',
				method:'POST',
				data:{
					'userID':personID,
					'status':this.TabCur4
				}
			}).then((res)=> {
				console.log('加载成功'+ res.data.code)
				if(res.data.code==200){
					//数据渲染操作
				
				}
					
			},(err)=>{
				console.log(err)
				//这里是reject返回的参数
			})

接下来将唯一登录的思路和实现:

  • 在请求头中设置token,用token来判断是否异地登录
  • 首先,在登录的时候 ,后台会返回一个token 存储在本地

login.vue页面

uni.request({
				method: 'POST',
				url: this.baseUrl + 'index.php/login/SignIn',
				data: {
					UserName: this.account,
					PassWord: this.password
				},
				success: res => {
					console.log(res.data);
					if (res.data.code == 200) {
						uni.showToast({
							icon: 'none',
							title: '登陆成功!!!'
						});
						uni.setStorage({
							key: 'token',
							data: res.data.data.token
						});
					}
				}
			})
  • 其次,在其他接口请求的时候从本地获取token,在请求头里发送这个token,如果和后台的token是一致的,说明没有异地登录,一旦异地登录,后台的token就会发生变化,与请求头中的token不一致,则会返回404状态码,这时候退出登录,清空本地存储的token即可,代码在上面封装的request请求里面,这里只放代码片段

http.js页面

header: {
     'token': newtoken,
     'Content-Type': options.header == 'form' ? 'application/x-www-form-urlencoded' : 'application/json'
    },
  • 最后再次登录时后端会发送新的token 再次保存在请求头中

如果只想实现request请求的封装可以去看这位博主的链接:
https://www.jianshu.com/p/2bb51abfff1b

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

uniapp封装request函数 实现唯一登录,一个账号同时只能登陆一个设备 的相关文章

  • 是否可以限制用户登录 Firebase 应用的设备数量?

    语境 我正在帮助使用 Vue 更新 Cordova 应用程序 以从基于订阅的收入 用户必须付费才能访问该应用程序 转变为基于广告的收入 用户可以免费注册 但将拥有他们在使用应用程序时显示的广告 我们想要做的一部分是限制用户可以拥有帐户的设备
  • 如何在 Nuxt 中点击链接下载文件?

    我遇到了一个边缘情况问题 如果用户浏览几条 Nuxt 路线 单击网站 徽标 这是一个锚标记返回主页 然后单击浏览器本机后退按钮 最后单击一个应该的链接要打开 pdf 它会重定向到我的 404 页面 如果用户在页面加载时单击 pdf 链接 它
  • 如何为 VueJS 项目设置根/基 URL

    我已经部署了一个VueJS项目到像这样的域www example com 但是 我想将其移动到子文件夹 以便我可以像这样访问它www example com v1 如何设置基础 URL 或根 URLVueJS项目 注意 这与基本 URL 无
  • Vue:单个网站可以使用多个 Vue 应用程序吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我有一个 Hugo 静态网站 我正在使用 Vue 使其动态化 我们正在转型 长期计划尚未确定 但在中期阶段我们正在使用 Vue 我已经在一个页面
  • 如何以编程方式添加 Vue 3 组件?

    Vue 3 没有 Vue extend 方法 因此这里的示例不起作用 https css tricks com creating vue js component instances programmatically https css t
  • Vuejs ssr 检查用户是否针对每个请求进行了身份验证

    我正在为我的应用程序使用这个 ssr 样板 https github com vuejs vue hackernews 2 0 https github com vuejs vue hackernews 2 0 我不知道如何实现逻辑来检查每
  • node.js、vue.js 和express.js 堆栈开发

    我正在尝试使用 Linux 上的 Visual Studio Code IDE 使用 vue js express js 和 node js 创建一个 Web 应用程序 根据网上的一些文档 我读到安装 vue js 后 可以创建一个vue
  • Vue 3:使用渲染函数将所有项目包装在一个自定义组件中

    我正在尝试建立自己的sortable成分 我想将项目列表传递到它的默认插槽 然后 可排序组件应该用自定义包装所有传递的项目v draggable成分
  • Vue.js 更改 {{ }} 标签

    我想改变 something by 在 Vue js 中 我怎样才能实现这一点 这可能吗 我在 AngularJS 中寻找的等效项 var app angular module app function interpolateProvide
  • Vue js - 在同一级别的两个组件内传递数据

    我有需要从一个传递的数据component1到另一个component2 我不使用vuex or router 组件树 Parent Component1 Component2 从一开始component1我发出 ajax 请求 检索信息并
  • Vuetify 自动完成类似项目未显示

    我的本地案例中有类似标题的自定义帖子API我尝试通过搜索查询显示帖子items array Data count 5 entries id 3 title Senior developer Python id 4 title Senior
  • FontAwesome SVG 图标与 Vuetify - 如何在 v-icon/prepend-icon 中使用?

    我是 Vue 新手 找不到如何在 v icon 和 prepend icon 中使用 FA SVG 图标的确切答案 如果我使用
  • 如何以编程方式启动 Vuetify 对话框并等待响应

    我对 Vue js 和 Vuetify 相当陌生 使用 AngularJS 好几年了 但我们公司正在转向 Vue js 我想要完成的是 当用户单击 登录 按钮时 它会执行一些检查 即用户名不能为空 并启动 Vuetify 对话框来提醒用户
  • 错误:[vuex] 期望 string 作为类型,但发现未定义

    学习Vuex 我写了一个简单的登录页面示例项目 https github com vuejs vuex tree dev examples shopping cart和document https vuex vuejs org zh gui
  • 左侧导航菜单上部隐藏

    当滚动到页面最底部时 左侧导航菜单的顶部将被隐藏 The image before scrolling is shown below 滚动后的效果如下图 我不确定此问题的确切原因 因此我将不胜感激任何有关识别和解决该问题的建议或帮助 为了确
  • 如何在不使用变换或顶部/左侧的情况下转换列表中项目的位置

    有一天我偶然发现一个例子 https codepen io itslit pen gvKrMY它使用 Vue js 但我的问题更多是关于 Vue 用于实现状态之间转换的 CSS 和 HTML 卡片暂时获得等级 shuffleMedium m
  • 在重复内容区域添加

    我有一个菜单组件 简单地说 它接受一个带有一系列选项的道具 并为每个选项在菜单中呈现一个项目 我希望能够根据用例自定义每个菜单项内的标记 因此我在菜单项元素内使用了占位符 你可以在这个中看到一个例子fiddle https jsfiddle
  • 将 CKEditor 5 与 nuxtjs 结合使用

    我正在尝试在我的 Nuxtjs 项目中导入 CKEditor 5 的自定义版本 并且我已经尝试了所有可能的方法来正确导入它 但没有一个对我有用 这是其中之一 let ClassicEditor let CKEditor if process
  • Vue警告无法解析组件:ion-icon

    以下的用法如下https ionicons com usage https ionicons com usage the ion icon显示但我收到此警告 Failed to resolve component ion icon 我的步骤
  • vue js中的process.env.BASE_URL是什么?

    当我使用 vue cli 安装 vue 时手动选择预设 我偶然发现了 process env BASE URL 我试图在互联网上找到它 但无济于事 我找不到任何像样的解释 这是代码 const router new VueRouter mo

随机推荐