一丶授权

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”域名下的接口请求请全部通过后台服务器发起,请勿直接通过小程序的前端代码发起。

小程序页面调用服务器接口授权,小程序的授权和登陆相关推荐

  1. 微信小程序教程-调用服务器接口

    微信小程序向后台发起请求非常简单,格式如下 wx.request({url: 'https://jorian.api.cn/artilces',header: {'content-type': 'ap ...

  2. 微信小程序接入微信支付(三):小程序端调用支付接口

    微信小程序调用支付接口官方文档:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=5 在上一节中 ...

  3. 调用支付宝接口生成小程序二维码的坑(PHP)

    引言:最近在开发支付宝小程序生成二维码的时候碰到了一点问题,记录一下 1.需求 正在开发的这个项目是一个电商类小程序,需求是给每个产品生成一个独立的小程序二维码 2.实现 了解了需求之后,开始查官方文 ...

  4. ajax 调用服务器接口报403错误解决办法

    发现问题 在前端页面中远程调用服务器接口时报403错误,而直接在浏览器访问则不会报错. Ajax调用结果: 浏览器调用结果: 报403原因 经过分析发现是因为前端和服务器的域名不同而触发了防盗链机制. ...

  5. SQL Server 2005 - 如何在预存程序中调用另外一个预存程序

    要在一个预存程序中调用另外一个预存程序,可以使用下列两种方式之一进行调用:  <?xml:namespace prefix = o /> EXECUTE <欲执行之预存程序的名称&g ...

  6. 【笔记】实战mpvue2.0多端小程序框架——原生小程序 API 调用与多端小程序发布

    文章目录 一.支付宝小程序源码运行 1.开发者工具下载 2.运行小程序 二.支付宝小程序用户授权 三.支付宝小程序获取OpenId 1.源码改造 2.服务器接口 (1)生成公钥和私钥 (2)填入公钥信 ...

  7. java 怎么页面授权访问_Java调用Linkedin接口API之:获取授权

    配置领英应用 配置地址:https://www.linkedin.com/secure/developer?newapp= 强烈建议您使用 HTTPS 网址必须是绝对网址 (例如: "htt ...

  8. 小程序怎样和服务器交互,微信小程序与 Django服务器 数据流 交互通信

    Django服务器 解析小程序发送的json二进制字符串 https://blog.csdn.net/qq_25068917/article/details/81041048 http://www.c ...

  9. uni-app分享小程序页面给微信好友;小程序分享无效原因;小程序分享失败原因;

    我的只是在html代码部分 使用 <button open-type="share" >发送</button> 点击按钮就可以将当前页面分享到微信好友 且打 ...

  10. 微信小程序直播消耗服务器流量,微信小程序直播私域流量过程要用多久

    满足品牌长线的规划,从追逐流量走向运营私域流量.不过,醉终能不能实现这个过程,或者这个私域流量过程要用多久,还得看微X信 的速度了.小程序直播上线很长一段时间,还是有很多用户不会用,小编写下此文,希望 ...

最新文章

  1. Linux的文件权限
  2. Sendmail+dovecot+saslauth+rainloop
  3. BAPI_CONTRACT_CREATE
  4. 教你如何在linux 下批量卸载
  5. Linux 进程间通讯(IPC)方式 ------- 共享内存
  6. 为什么机器学习行业的发展离不开 “开源”
  7. 整人的python代码_vbe最新整人代码
  8. 安装 Silverlight 5/silverlight4 出错的解决方法
  9. UE4 WebBrowser插件版本
  10. 2021阿里淘系工程师推荐书单
  11. 怎么样把自己计算机两个硬盘合并,两个硬盘怎么合并成一个盘
  12. 第四方支付崛起,聚合支付为什么这么火?
  13. MySQLyog的使用
  14. svg文件解析(python)
  15. android的app,用java程序开发
  16. SPSSAU综合评价方法汇总
  17. PB级大规模Elasticsearch集群运维与调优实践
  18. JAVA财务保证金管理模块开发-王大师王文峰开发(项目现场驻场开发)
  19. 异步与promise
  20. 小米android框架服务,快应用服务框架下载

热门文章

  1. 用友U8去除凭证外部凭证标记
  2. 用友凭证打印页面边距设置会同步
  3. android packages/apps 加入工程,深入安卓Package Manager和Package Installer
  4. linux设备连接磁带机,Linux磁带机设备绑定
  5. 磁带机故障灯解决方法
  6. gitlab增加p3c-hook强制代码规范
  7. 智能电视软件安装(WIFI上网)
  8. angular4之管道
  9. 2020苏州大学计算机考研经验总结博
  10. HTML5前端开发实战01-学生信息表