小程序页面调用服务器接口授权,小程序的授权和登陆
一丶授权
1.首先,小程序的授权和登陆是两个不同的操作。
2.授权,是永久的。可以手动在小程序右上角的点点点进去,取消授权。
3.授权分为用户信息授权,地理位置授权,录音功能授权,摄像头授权等等。最常用的授权是用户信息授权。
4.旧代码授权使用wx.authorize,不过如今已经废弃不能用了。
5.如今只能通过按钮点击授权,代码如下:
授权
js回调代码:
getUserInfo: function(e) {
console.log(e)
app.globalData.userInfo = e.detail.userInfo
this.setData({
userInfo: e.detail.userInfo,
hasUserInfo: true
})
}
二丶登陆
在传统应用中,输入账号和密码实现登录。
在小程序中,通过微信服务器获取到 openId 实现登陆。
PS:openid
每个用户相对于每个微信应用(公众号或小程序等)的openId 是唯一的。也就是说一个用户相对于不同的微信应用会存在不同的openId。
PS:unionid
同一用户,对同一个微信开放平台下的不同应用,unionid是相同的
小程序登陆步骤如下:
1.注册微信小程序、登录后台在设置中获得appId和secret(密钥)
2.调用wx.login()接口获取登录凭证code
3.调用wx.request()接口把code发送到服务器后台
4.服务器后台,使用appId、secret、code访问微信服务器,获取openid和session_key
5.服务器定义加密字符串aaa对应openid和session_key,将aaa返回给前端
6.前端使用wx.setStorageSync() 保存aaa
当下次进入微信小程序的时候,
1.前端判断授权
2.前端获取wx.getStorage获取aaa
3.前端通过aaa获取session_key
4.前端通过wx.checkSession() 获取是否过期。
5.如果没有过期,那么不用再次登陆。
跟群里大佬聊天,有了新的理解
1.调用wx.login()接口获取登录凭证code
2.调用wx.request(),数据库没有openid,服务器获取openid,如果不存在就保存
4.服务器加密openid为3rd_openid, 3rd_openid有时间限制。
4.将3rd_openid传给前端
5.前端将3rd_openid保存在缓存,每次操作带上参数3rd_openid
再次进入小程序:
1.getStorageSync获取3rd_openid
2.每次操作带上参数3rd_openid
3.如果3rd_openid过期了,返回登陆界面
4.重新登陆,服务器获取openid,发现已经存在,返给你加密后的
但是有问题,就是没有密码。因为3rd_openid能在后台解出来openid,用户名和密码等信息。
后台的不是很了解了。
4045079-bdf8f5df03c83f39.jpg
································
又有了新的理解
我们只需要formid和openid,为啥要微信登陆?只需要微信授权就可以了。
1.第一次进入,用户输入手机号,验证码登陆,
2.如果手机号和登陆吗正确,但是没有openid,后台返回一个需要openid的参数(后台推送需要openid)
3.前端wx.login将code发送给后台
4.后台保存openid,并返回3rd_openid
5.前端保存3rd_openid,每次发送请求带上3rd_openid
6.后台报错,超时间,前端再次验证码登陆,
https://www.cnblogs.com/zhangjiabin/p/8037523.html
PS:这里可能有人疑惑,既然有了user_id还要session_key干嘛。因为如果session_key过期了,你又不再次登陆(wx.login),那么你在微信服务器眼里就是没有登陆的。那么很多功能不能使用。比如支付,推送等。
PS:我不使用openid相关的功能,是不是就不用这么麻烦了?是的。
PS:登陆时间(session_key)持续时间长度,不是固定的,是根据你使用频率决定
PS:官方提供的,获取openid和session_key的接口如下:
https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
小程序登陆步骤图:
login1.png
// 登录
wx.login({
success: res => {
// ------ 获取凭证 ------
var code = res.code;
if (code) {
// console.log('获取用户登录凭证:' + code);
// ------ 发送凭证 ------
wx.request({
url: '后台服务器地址',
data: { code: code },
method: 'POST',
header: {'content-type': 'application/json'},
success: function (res) {
if (res.statusCode == 200) {
// console.log("获取到的openid为:" + res.data)
// that.globalData.openid = res.data
wx.setStorageSync('openid', res.data)
} else {
console.log(res.errMsg)
}
},
})
} else {
console.log('获取用户登录失败:' + res.errMsg);
}
}
})
那么,有人会问了,如果小程序,不通过后台服务器,而是直接访问微信服务器获取openid和session_key不可以么?当然可以。但是不安全。
因为小程序的开发者密码(AppSecret)是一个非常重要的字段,使用该密码可以调用小程序的所有后台接口。请不要将该字段放置在微信小程序的前端代码中,因为微信手机客户端容易被反编译并轻松获得Appsecret,造成重大的安全威胁。开发者应将Appsecret保存到后台服务器中。微信公众平台小程序后台的服务器地址设置也将禁止将“api.weixin.qq.com”域名的配置,所有对于“api.weixin.qq.com”域名下的接口请求请全部通过后台服务器发起,请勿直接通过小程序的前端代码发起。
小程序页面调用服务器接口授权,小程序的授权和登陆相关推荐
- 微信小程序教程-调用服务器接口
微信小程序向后台发起请求非常简单,格式如下 wx.request({url: 'https://jorian.api.cn/artilces',header: {'content-type': 'ap ...
- 微信小程序接入微信支付(三):小程序端调用支付接口
微信小程序调用支付接口官方文档:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=5 在上一节中 ...
- 调用支付宝接口生成小程序二维码的坑(PHP)
引言:最近在开发支付宝小程序生成二维码的时候碰到了一点问题,记录一下 1.需求 正在开发的这个项目是一个电商类小程序,需求是给每个产品生成一个独立的小程序二维码 2.实现 了解了需求之后,开始查官方文 ...
- ajax 调用服务器接口报403错误解决办法
发现问题 在前端页面中远程调用服务器接口时报403错误,而直接在浏览器访问则不会报错. Ajax调用结果: 浏览器调用结果: 报403原因 经过分析发现是因为前端和服务器的域名不同而触发了防盗链机制. ...
- SQL Server 2005 - 如何在预存程序中调用另外一个预存程序
要在一个预存程序中调用另外一个预存程序,可以使用下列两种方式之一进行调用: <?xml:namespace prefix = o /> EXECUTE <欲执行之预存程序的名称&g ...
- 【笔记】实战mpvue2.0多端小程序框架——原生小程序 API 调用与多端小程序发布
文章目录 一.支付宝小程序源码运行 1.开发者工具下载 2.运行小程序 二.支付宝小程序用户授权 三.支付宝小程序获取OpenId 1.源码改造 2.服务器接口 (1)生成公钥和私钥 (2)填入公钥信 ...
- java 怎么页面授权访问_Java调用Linkedin接口API之:获取授权
配置领英应用 配置地址:https://www.linkedin.com/secure/developer?newapp= 强烈建议您使用 HTTPS 网址必须是绝对网址 (例如: "htt ...
- 小程序怎样和服务器交互,微信小程序与 Django服务器 数据流 交互通信
Django服务器 解析小程序发送的json二进制字符串 https://blog.csdn.net/qq_25068917/article/details/81041048 http://www.c ...
- uni-app分享小程序页面给微信好友;小程序分享无效原因;小程序分享失败原因;
我的只是在html代码部分 使用 <button open-type="share" >发送</button> 点击按钮就可以将当前页面分享到微信好友 且打 ...
- 微信小程序直播消耗服务器流量,微信小程序直播私域流量过程要用多久
满足品牌长线的规划,从追逐流量走向运营私域流量.不过,醉终能不能实现这个过程,或者这个私域流量过程要用多久,还得看微X信 的速度了.小程序直播上线很长一段时间,还是有很多用户不会用,小编写下此文,希望 ...
最新文章
- Linux的文件权限
- Sendmail+dovecot+saslauth+rainloop
- BAPI_CONTRACT_CREATE
- 教你如何在linux 下批量卸载
- Linux 进程间通讯(IPC)方式 ------- 共享内存
- 为什么机器学习行业的发展离不开 “开源”
- 整人的python代码_vbe最新整人代码
- 安装 Silverlight 5/silverlight4 出错的解决方法
- UE4 WebBrowser插件版本
- 2021阿里淘系工程师推荐书单
- 怎么样把自己计算机两个硬盘合并,两个硬盘怎么合并成一个盘
- 第四方支付崛起,聚合支付为什么这么火?
- MySQLyog的使用
- svg文件解析(python)
- android的app,用java程序开发
- SPSSAU综合评价方法汇总
- PB级大规模Elasticsearch集群运维与调优实践
- JAVA财务保证金管理模块开发-王大师王文峰开发(项目现场驻场开发)
- 异步与promise
- 小米android框架服务,快应用服务框架下载