热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

小程序的授权和登陆

参考资料:https://blog.csdn.net/qq_33594380/article/details/80431582https://blog.csdn.net/u013451157/ar

参考资料:
https://blog.csdn.net/qq_33594380/article/details/80431582
https://blog.csdn.net/u013451157/article/details/80286035

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



推荐阅读
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 解决FCKeditor应用主题后上传问题及优化配置
    本文介绍了在Freetextbox收费后选择FCKeditor作为替代方案时遇到的上传问题及其解决方案。通过调整配置文件和调试工具,最终解决了上传失败的问题,并对相关配置进行了优化。 ... [详细]
  • 微信小程序:授权登录与手机号绑定
    本文详细介绍了微信小程序中用户授权登录及绑定手机号的流程,结合官方指引和实际开发经验,提供了一套完整的实现方案,帮助开发者更好地理解和应用。 ... [详细]
  • 本文探讨了在 SQL Server 中使用 JDBC 插入数据时遇到的问题。通过详细分析代码和数据库配置,提供了解决方案并解释了潜在的原因。 ... [详细]
  • 深入解析BookKeeper的设计与应用场景
    本文介绍了由Yahoo在2009年开发并于2011年开源的BookKeeper技术。BookKeeper是一种高效且可靠的日志流存储解决方案,广泛应用于需要高性能和强数据持久性的场景。 ... [详细]
  • 本文详细介绍了JSP(Java Server Pages)的九大内置对象及其功能,探讨了JSP与Servlet之间的关系及差异,并提供了实际编码示例。此外,还讨论了网页开发中常见的编码转换问题以及JSP的两种页面跳转方式。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • Python + Pytest 接口自动化测试中 Token 关联登录的实现方法
    本文将深入探讨 Python 和 Pytest 在接口自动化测试中如何实现 Token 关联登录,内容详尽、逻辑清晰,旨在帮助读者掌握这一关键技能。 ... [详细]
  • Django Token 认证详解与 HTTP 401、403 状态码的区别
    本文详细介绍了如何在 Django 中配置和使用 Token 认证,并解释了 HTTP 401 和 HTTP 403 状态码的区别。通过具体的代码示例,帮助开发者理解认证机制及权限控制。 ... [详细]
  • CentOS 7.6环境下Prometheus与Grafana的集成部署指南
    本文旨在提供一套详细的步骤,指导读者如何在CentOS 7.6操作系统上成功安装和配置Prometheus 2.17.1及Grafana 6.7.2-1,实现高效的数据监控与可视化。 ... [详细]
  • 本文介绍如何配置SecureCRT以正确显示Linux终端的颜色,并解决中文显示问题。通过简单的步骤设置,可以显著提升使用体验。 ... [详细]
  • 本文详细探讨了在微服务架构中,使用Feign进行远程调用时出现的请求头丢失问题,并提供了具体的解决方案。重点讨论了单线程和异步调用两种场景下的处理方法。 ... [详细]
  • MySQL锁机制详解
    本文深入探讨了MySQL中的锁机制,包括表级锁、行级锁以及元数据锁,通过实例详细解释了各种锁的工作原理及其应用场景。同时,文章还介绍了如何通过锁来优化数据库性能,避免常见的并发问题。 ... [详细]
author-avatar
张小白
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有