首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >uni-id入门(四)---过拦截用户某些请求

uni-id入门(四)---过拦截用户某些请求

作者头像
代码哈士奇
发布于 2021-10-25 03:28:55
发布于 2021-10-25 03:28:55
69200
代码可运行
举报
文章被收录于专栏:dmhsq_csdn_blogdmhsq_csdn_blog
运行总次数:0
代码可运行

上个文章我们讲了创建实例,在讲基础模块之前我们先讲如何拦截用户的请求 我们的视频教程(免费)链接为https://static-b5208986-2c02-437e-9a27-cfeba1779ced.bspapp.com/ 由于考研所以可能文章比较短也是为了拆分每一步操作

为什么拦截

我们要知道用户的某些请求是不需要权限的比如浏览商品,不登录也可以浏览,但是用户在购买的时候就需要确认用户身份,所以我们要拦截用户的某些请求。

比如登录前进行加购或购买操作肯定会被拦截并告知需要登录,这一类需要登录却没有登录的我们做一个拦截

登录后登录失效的我们也要拦截,所以进行某些登录后操作(需要鉴权)的发现登录失效的做一个拦截

用户的请求在后台没有对应请求,比如说我们的某个应用不存在A操作,那么用户通过某些途径进行A操作,比如说post/get某些不存在请求,这时我们告知非法请求。

如何拦截

很明显 我们不拦截 登录 注册 等某些不需要权限/登录才能操作的请求 我们给予放行 这时我们可以构建一个拦截字段数组 当字段存在于数组中我们就放行,否则就拦截

完整代码(下面分布讲解)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'use strict';
const uniIDs = require('uni-id')
exports.main = async (event, context) => {

	let res = {}; //响应
	let params = event.params ?event.params:{}; //接收请求数据

	const uniID = uniIDs.createInstance({
		context: context
	})
	const noNeedTokens = ['login', 'register', 'logout'];
	if (noNeedTokens.indexOf(event.action) == -1) {
			if (!event.uniIdToken) {
				res = {
					code: 403,
					message: "未携带token"
				}
				return res;
			} else {
				let check_user = await uniID.checkToken(event.uniIdToken, {});
				if (check_user.code === 0) {
					params.uid = check_user.uid;
				} else {
					res = check_user;
					return res;
				}
			}
	}
	switch (event.action) {
		...进行对应操作
		default: {
			res = {
				code: 402,
				message: "请求非法"
			}
			break;
		}
	}	

	//返回数据给客户端
	return res;
};

构建放行数组

这里我们放行 登录注册退出操作

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const noNeedTokens = ['login', 'register', 'logout'];

放行不需要登录的操作

注意如上 这里的event action是判断操作类型(比如登录退出)

这里如果在放行数组我们就让他跳过登录失效检测直接操作

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const noNeedTokens = ['login', 'register', 'logout'];
if (noNeedTokens.indexOf(event.action) == -1) {
		检测登录是否失效或者是否登录
}
switch (event.action) {
	...进行对应操作
}

拦截未登录以及登录失效

uniIdToken是登录后得到的令牌也就是token uniID.checkToken是uni-id的鉴权操作用来检测 见文档https://uniapp.dcloud.io/uniCloud/uni-id?id=checktoken

步骤如下 如果不存在uniIdToken 那么判定为未登录 设置响应结果res 并且直接return res;跳过后续步骤

如果存在则判断token是否失效 调用uniID.checkToken来判断(这里也可以判断权限) 如果未过期我们就获取uniID.checkToken的返回结果中的uid(用户id) 以便于后续操作使用 否则就将uniID.checkToken未通过的原因作为响应结果返回

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const noNeedTokens = ['login', 'register', 'logout'];
if (noNeedTokens.indexOf(event.action) == -1) {
		if (!event.uniIdToken) {
			res = {
				code: 403,
				message: "未携带token"
			}
			return res;
		} else {
			let check_user = await uniID.checkToken(event.uniIdToken, {});
			if (check_user.code === 0) {
				params.uid = check_user.uid;
			} else {
				res = check_user;
				return res;
			}
		}
}
switch (event.action) {
	...进行对应操作
	default: {
			res = {
				code: 402,
				message: "请求非法"
			}
			break;
		}
}

拦截非法请求

看switch case 如果找不到响应操作 就告知为非法请求

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const noNeedTokens = ['login', 'register', 'logout'];
if (noNeedTokens.indexOf(event.action) == -1) {
		if (!event.uniIdToken) {
			res = {
				code: 403,
				message: "未携带token"
			}
			return res;
		} else {
			let check_user = await uniID.checkToken(event.uniIdToken, {});
			if (check_user.code === 0) {
				params.uid = check_user.uid;
			} else {
				res = check_user;
				return res;
			}
		}
}
switch (event.action) {
	...进行对应操作
	default: {
			res = {
				code: 402,
				message: "请求非法"
			}
			break;
		}
}

结语

到此拦截请求结束

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/07/24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么拦截
  • 如何拦截
    • 完整代码(下面分布讲解)
    • 构建放行数组
    • 放行不需要登录的操作
    • 拦截未登录以及登录失效
    • 拦截非法请求
  • 结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档