技术标签: unipp 微信小程序 前端 自定义验证登录 javascript
这次项目有一个需求是实现点击一些按钮路由跳转前验证用户是否登陆,以及一些不跳转路由的功能,按钮点击后出现模态框前验证用户是否登陆。
首先我并没有选择路由守卫,因为我的需求有不进行路由跳转进行验证的地方。
但是路由守卫用来做跳转前验证肯定是个不错的选择。我贴一个博客大家可以参考其他人的路由守卫方案
https://cnblogs.com/XHappyness/p/13808413.html
我是自己写的贴合需求的验证授权方法。
1.考虑跳转路由可以使用
2.在某些不跳转路由的需要验权的可以使用
export function judgeLogin() {
return new Promise((resolve, reject) => {
// 还未登陆
if (!uni.getStorageSync('user')) {
// #ifdef H5
// 重定向到H5登录页
uni.redirectTo({
url: '/pages/login/index'
})
reject()
// #endif
// 微信小程序未登录
// #ifdef MP-WEIXIN
// 登陆用的临时code
let wxCode = null
let loginInfo = uni.getStorageSync('wxUserLogin') || {
}
uni.login({
provider: 'weixin',
// 获取临时code
success: function(wx){
console.log(wx, 'wx')
wxCode = wx.code
// 因为code是变化的,用上一次code会登陆失败,所以每次会重新获取code并加入缓存
loginInfo.code = wxCode
uni.setStorageSync('wxUserLogin', loginInfo)
},
})
// 若没有保存用户授权信息
if (!uni.getStorageSync('wxUserLogin')) {
wx.getUserProfile({
desc: "获取你的昵称、头像、地区及性别",
success: (res) => {
console.log(res, "成功返回的用户对象")
loginInfo = {
code: wxCode,
encryptedData: res.encryptedData,
iv: res.iv,
userInfo: res.userInfo
}
uni.setStorageSync('wxUserLogin', loginInfo)
uni.navigateTo({
url:'/pages/index/login?loginInfo=' + encodeURIComponent(JSON.stringify(uni.getStorageSync('wxUserLogin')))
})
return
},
fail: res => {
//拒绝授权
// uni.showErrorModal('您拒绝了请求');
uni.showToast({
icon: 'none',
title: '您拒绝了请求',
duration: 1000
})
}
})
} else {
uni.navigateTo({
url:'/pages/index/login?loginInfo=' + encodeURIComponent(JSON.stringify(uni.getStorageSync('wxUserLogin')))
})
}
reject()
// #endif
}
resolve()
})
}
export default judgeLogin
上面是整个文件,接下来我摘出来几段看一下
我想要大家在验证之后再去执行本来应该的操作,所以我把这个方法写成了promise,当然可以改成接收一个函数参数作为回调也是可以的
return new Promise((resolve, reject) => {
// 还未登陆
if (!uni.getStorageSync('user')) {
// #ifdef H5
// 重定向到H5登录页
uni.redirectTo({
url: '/pages/login/index'
})
reject()
// #endif
// 首先要调用 uni.login 获取授权用的code
let wxCode = null
let loginInfo = uni.getStorageSync('wxUserLogin') || {
}
uni.login({
provider: 'weixin',
// 获取临时code
success: function(wx){
console.log(wx, 'wx')
wxCode = wx.code
// 因为code是变化的,用上一次code会登陆失败,所以每次会重新获取code并加入缓存
loginInfo.code = wxCode
uni.setStorageSync('wxUserLogin', loginInfo)
},
})
// 因为微信获取用户信息需要用户触发按钮,而我们不希望一直让用户反复操作,所以我把用户授权的信息存在了storage中
// 若没有保存用户授权信息
if (!uni.getStorageSync('wxUserLogin')) {
wx.getUserProfile({
desc: "获取你的昵称、头像、地区及性别",
success: (res) => {
console.log(res, "成功返回的用户对象")
loginInfo = {
code: wxCode,
encryptedData: res.encryptedData,
iv: res.iv,
userInfo: res.userInfo
}
uni.setStorageSync('wxUserLogin', loginInfo)
uni.navigateTo({
url:'/pages/index/login?loginInfo=' + encodeURIComponent(JSON.stringify(uni.getStorageSync('wxUserLogin')))
})
return
},
fail: res => {
//拒绝授权
// uni.showErrorModal('您拒绝了请求');
uni.showToast({
icon: 'none',
title: '您拒绝了请求',
duration: 1000
})
}
})
}
最后用户授权成功后跳转到登录页要 resolve()
登录成功后,我们测试,把storage中的user信息清掉,只留用户授权信息
这个时候直接就进到了登录页,不用用户再授权了
H5端
就直接金登录页了。
当然,如果用户已经登录了,是可以直接进到想去的页面以及弹窗的
工作中由于前期规划不足,导致磁盘空间分配较大,而且是厚置备。后期不再需要时,无法把用不到的空间释放出来,造成空间浪费。经过摸索和实验验证,到最终解决问题,总结出来两种方案。风险提示:两种方案的实验都验证通过了,但第一种方案在生产环境中没有成功,如有类似问题,建议采用第二种方案!环境:Esxi 6.5,vCenter 6.5 U1e,Ubuntu 16.04由于初始分配给Ubuntu ...
WordPress Version 4.7.2 was released primitively to correct three security flaws, which included a SQL injection and XSS (cross-site scripting) flaw. Administrators who have yet to update their WordPr...
Paper: [EMNLP2020]Two are Better Than One: Joint Entity and Relation Extraction with Table-Sequence Encoderslink: https://www.aclweb.org/anthology/2020.emnlp-main.133.pdfcode: https://github.com/LorrinWWW/two-are-better-than-one这是一篇关于实体关系联合抽取的工作。关于现有的.
为什么要跳槽为什么要跳槽,这个问题一定要思考清楚,因为跳槽的成本其实是挺大的,在一家公司积累的不仅仅是人脉还有对当前行业以及业务的熟悉度,新进入一家公司,一切需要从头再来,需要快速的证明自己,尤其是技术人员,还有就是对新环境和代码的熟悉,这些都是成本,所以 在跳槽前,一定要想好,为什么要跳槽 。其实马爸爸有一句经典的话“要么钱没给到位,要么心委屈了”,说的很形象,我这里再细说一下:1.钱没给...
安装 opengauss 1.01 for centos,执行完gs_preinstall后,/opt的权限变这样了[[email protected] opt]# lltotal 28drwxr-xr-x 6 root root 56 Jul 19 21:47 adbsqldrwxr-xr-x 6 omm dbgrp 4096 Jul 10 2018 apache-ant-1.10.5drwxr-xr-x 5 omm dbgrp 48 Jul 19 09:34 gaussdb...
fping程序类似于ping(ping是通过ICMP(网络控制信息协议InternetControl Message Protocol)协议回复请求以检测主机是否存在)。fping与ping不同的地方在于,fping可以在命令行中指定要ping的主机数量范围,也可以指定含有要ping的主机列表文件。与ping要等待某一主机连接超时或发回反馈信息不同,fping给一个主机发送完数据包后,马上给下一个主机发送数据包,实现多主机同时ping。如果某一主机ping通,则此主机将被打上标记,并从等待列表中移除,如果
机器配置为:VS2013+opencv2.4.13+Win-64bit。===========================分割线========================本节将利用ROI将一幅图像叠加到另一幅图像的指定位置。具体过程见下面代码=======================分割线========================代码演示 1 /* 2 利用...
阅读本文前,请您先点击上面的蓝色字体,再点击“关注”,这样您就可以继续免费收到文章了。每天都有分享,完全是免费订阅,请放心关注。 微信怎么设置主题皮肤?微信是我们现在经常使用的社交软件了,微信主题一般都是默认的,那怎么更换微信主题呢?今天小编为大家整理了微信设置主题...
如今,Python 已经成为一种再主流不过的编程语言了,它天生丽质,易于读写,非常实用,从而赢得了广泛的群众基础,被无数程序员热烈追捧。常言道: “流水的语言,铁打的 Python”,貌似目前它已经“睥睨天下,傲视群雄”了。其实Python已经是老司机了,它的第一个公开版本发布于1991年。不过在编程世界里,Python属于“小鲜肉”、“高颜值”,告别了以往的刻板印象。因为 Python 简单易用...
1、一个操作未完成,进行另一个操作,然后再完成第一个操作,会造成垃圾数据。一个操作进行时,应屏蔽其他操作。如:新建部门之后,新建人员但未完成,删除部门后,再保存人员,会使人员挂在空部门,形成垃圾数据。...
需求 需要对数据库的大量数据进行处理,数据库导出的文件是xls(2003之前的excel格式),需要将其中的厂家单独分项,如下图: 实现原理 纯c可以通过字节按照固定分隔读取excel,但是本需求要求可以输出txt,所以实现方式如下: excel源文件(10000行以上的表格)输入文件:in.txt文件临时文件temp.txt文件输出out....
使用pip安装出现报错 Exception:Traceback (most recent call last): File "C:\Users\csprock\Anaconda3\lib\site-packages\pip\basecommand.py", line 215, in main status = self.run(options, args) File "...