VPS参考测评推荐
专注分享VPS主机优惠信息
衡天云优惠活动
荫云优惠活动
wexlayer优惠活动
最新

快速说明如何确保小程序各页面已登录(登录小程序后进入首页)

主机参考:VPS测评参考推荐/专注分享VPS服务器优惠信息!若您是商家可以在本站进行投稿,查看详情!此外我们还提供软文收录、PayPal代付、广告赞助等服务,查看详情!
我们发布的部分优惠活动文章可能存在时效性,购买时建议在本站搜索商家名称可查看相关文章充分了解该商家!若非中文页面可使用Edge浏览器同步翻译!PayPal代付/收录合作

微信小程序如何保证所有页面都已登录?本文介绍一种小程序方法来保证所有页面都已登录。 我希望这有帮助。

微信小程序包括首页、个人页面、部分列表页面、详情页面等,并且这些页面大部分都是可以共享的。 如果一个共享页面被其他用户打开,这个页面如何验证用户是否登录?

网上有一种利用拦截来封装请求的方法,有很多解决方案可以补充。 。 如果您没有令牌,请先调用登录请求以获取令牌,然后再继续。 这个解决方案没有任何问题。 只需要小心一件事。 如果页面同时触发多个请求,则拦截完所有请求后放入一个数组中。 成功获取令牌后,您只需一次一个请求地遍历数组即可。

但是,这个要求有点复杂。 例如,连锁便利店小程序在大多数页面上都需要商店(因为它需要根据商店检索当前商店中产品的库存和价格等信息)。 该商店是在当前商店的基础上建立的。 通过调用后台接口获取位置。 在这种情况下,将其封装在请求中就很麻烦。

解决方案

首先,我注意到登录和位置检索与页面请求是异步的。 我需要确保在登录并获取位置信息后发出页面请求,但重写每个页面的可维护性太低。 所以你可以提取如何做到这一点。 代码应该如下所示:

const app = getApp()Page({ data: { logs: [] }, onLoad() { app.commonLogin(()=>{ // 处理页面请求 } ) }})

这个看起来已经解决了问题,但是如果你想做更多的事情,比如统一处理每个页面的onShareAppMessage,那就再想一想了。 但我不想每次都这么做。 重新写每一页。 此外,我想在每个页面上实现对自己的监控。 我该怎么做?

进一步的解决方案

微信小程序将会出现。 每个页面都是一个 Pag。e() 允许您在此页面之外添加 shell 并用 MyPage 替换此页面。 我会立即向您展示代码。

tool.js相关代码

/** * 处理合并参数 */ handlePageParamMerge(arg) { let umargs = arg.length; // 获取传入参数的值 . let data = {} let page = {} for (let ix in arg) { let item = arg[ix] if (item.data && typeof (item.data) === 'object') { data = Object.assign (data, item.data) } if (item.methods && typeof (item.methods) === 'object') { page = Object.assign(page, item.methods) } else {page = object.assignign(page, it)}} page.data = 数据返回page}/****合并页面方法和数据,兼容{data: {}、methods: {}}或{data : {}, a:{}, b:{}} */ mergePage() { return this.handlePageParamMerge(arguments) } /** * 处理组件参数的合并 */ handleCompParamMerge(arg) { 让 numerge = arg.length; // 获取传递参数的值。 let data = {} let options = {} letproperties = {} letmethods = {} let com p = {} for (let ix in arg) { let item = arg[ix] // 合并组件的初始数据 if ( item. data && typeof (item.data) === 'object') { data = Object.assign(data, item.data) } // 合并组件属性列表 if (item.properties && typeof (item.properties) === 'object') {properties = Object.assign(properties, item.properties) }                                                                                                                                                                                                               方法列表 item.methods) } if (item.options && typeof (item.options) === 'object') { options = Object.assign(options, item.options) } comp = Object.assign(comp, item)} comp.data = 数据 comp.options = 选项 comp.properties = 属性 comp.method s = 方法返回 comp } /** * 组件组合 {properties: {}, options: {}, data:{} , method: { }} */ mergeComponent() { return this.handleCompParamMerge(arguments) } /*** * 使用监视来合并页面 */ newPage() { let options = this.handlePageParamMerge(arguments) let that = this let app = getApp() //添加全局点击登录检查 if (!options.publicCheckLogin){ options.publicCheckLogin = function (e) { letpages = getCurrentPages() let page =pages [pages.length - 1] let dataset = e.currentTarget.dataset let callback = null // 获取。 回调方法 if (dataset.callback && typeof (page[dataset.callback]) === "function"){ callback = page[dataset.callback]                                                                  console.log('callback>>', callback, app.isRegister()) 决定是否登录 if (callback && app.isRegister()){ callback(e) } else{ wx.navigateTo({ url: '/page/login/login' }) } } } } const { onLoad } = options options.onLoad = function (arg) { options.watch && that.setWatcher(this) onLoad && onLoad.call(this, arg) } const { onShow } =可选可选。 onShow = function (arg) { if (options.data.noAutoLogin || app.isRegister()) { onShow w && onShow.call(this, arg) //页面嵌入点             testo ({url: '/pages/login/login'})}}} 返回页面(可选)}/*** 使用手表等组合组件。 */ newComponent() { let options = this.handleCompParamMerge(arguments) let that = this const {ready } = options options.ready = function (arg) { options.watch && that.setWatcher (this) Ready && Ready.call (this, arg) } return Component(options) } /** * 设置监听器 */ setWatcher(page) { let data = page.data; = page.watch; Object.keys(watch).forEach(v => { let key = v.split('.'); // 使用 '.' 将 watch 的属性拆分为数组 let nowData = data ; / / 将数据赋值给 nowData (let i = 0; i { // 遍历 val 对象下的每个 key this.observ e(val, childKey, watchFun, deep, page); // 递归调用监听函数 }) } var that = Object.defineProperty(obj, key, {configurable: true, enumerable: true, set: function (value);{ watchFun.call(page, value, val); // value 是新值,val 是旧值 val = value; if (deep) { // 对于深度监控,重新监控对象并监控其属性。马苏。 That.observe(obj, key, watchFun, deep, page); } }, get: function () { return val; } }

页面代码:

app.tool.newPage({ data: { // noAutoLogin: false }, onShow: function () { // 在此编写页面请求逻辑 }}

最后

这个工具的 newPage 该包已经在网上运行了很长时间了,有需要的可以添加一下,所以我在这里给大家提供一下思路。

【相关学习推荐:迷你程序开发教程】

> 如何快速学习PHP的免费视频教程(从初级到高级)

如何快速学习PHP?别担心,PH在这里。P的快速学习教程(从入门到精通),需要的朋友可以保存下来下载学习。

下载

这几篇文章你可能也喜欢:

本文由主机参考刊发,转载请注明:快速说明如何确保小程序各页面已登录(登录小程序后进入首页) https://zhujicankao.com/142623.html

【腾讯云】领8888元采购礼包,抢爆款云服务器 每月 9元起,个人开发者加享折上折!
打赏
转载请注明原文链接:主机参考 » 快速说明如何确保小程序各页面已登录(登录小程序后进入首页)
主机参考仅做资料收集,不对商家任何信息及交易做信用担保,购买前请注意风险,有交易纠纷请自行解决!请查阅:特别声明

评论 抢沙发

评论前必须登录!