小程序微信登陆及账号绑定功能开发笔记

  • 一、用什么来识别用户?
  • 二、实现方法
    • (一)UnionID
      • 1、UnionID 机制说明
      • 2、UnionID获取途径
      • 3、微信开放平台绑定小程序流程
      • 4、小结
    • (二)OpenID
      • 1、流程
      • 2、注意事项
      • 3、session_key有什么用
  • 三、版本进化
    • 现有bug:
    • 问题分析
  • 2022-04-26更新:完整实现

目标功能:

  • 进入小程序后请求获取用户信息用于登录
  • 将获取到的用户信息与数据库中的信息进行比对
  • 数据合格(能在数据库中找到用户的信息)则进入主页
  • 数据不合格(找不到)则提示绑定教职工号,并跳转到绑定界面
  • 绑定界面将用户输入的账号和密码与数据库中的记录进行比对,账号和密码确认无误后,将当前的用户信息存入数据库,下次用户登录时直接在数据库中找用户的信息

一、用什么来识别用户?

有两个选择,一个是OpenID,另一个是UnionID。

它们的区别在于:

  • OpenID与公众号挂钩,一个用户在一个公众号里只有一个OpenID,但是该用户在不同的公众号里的OpenID不一样,不适用于跨公众号、跨平台等场景的使用,有OpenID不一样的风险。
  • UnionID是用户唯一的,跨公众号、跨平台也不会变,可以在用户管理-获取用户基本信息(UnionID机制)文档了解详情。

二、实现方法

(一)UnionID

UnionID机制说明-官方文档

1、UnionID 机制说明

如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过 UnionID 来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的 UnionID 是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,UnionID是相同的。

2、UnionID获取途径

绑定了开发者帐号的小程序,可以通过以下途径获取 UnionID。

  1. 开发者可以直接通过 wx.login + code2Session 获取到该用户 UnionID,无须用户授权。
  2. 小程序端调用云函数时,可在云函数中通过 Cloud.getWXContext 获取 UnionID。

3、微信开放平台绑定小程序流程

登录微信开放平台 — 管理中心 — 小程序 — 绑定小程序

4、小结

我们当前的小程序无法通过微信认证,因为是个人号。

即使我自己在开放平台注册了一个主体,也无法将其与我们的小程序绑定。

但是我可以绑定我自己的小程序。


也就是说,我们 可以用UnionID ,但是要 开放平台注册 一个 账号 ,然后才能与我们的小程序 绑定

(二)OpenID

小程序登录-官方文档

1、流程

  1. wx.login() 获取 code
  2. wx.request() 发送 code
  3. appid + appsecret + code 登录凭证校验接口
  4. 接口返回 session_key + openid 等

2、注意事项

  • 调用 wx.login() 获取 临时登录凭证code ,并回传到开发者服务器。
  • 临时登录凭证 code 只能使用一次
  • 调用 auth.code2Session 接口,换取 用户唯一标识 OpenID 、 用户在微信开放平台帐号下的唯一标识UnionID(若当前小程序已绑定到微信开放平台帐号) 和 会话密钥 session_key

3、session_key有什么用

A. session_key 有两个作用:

  1. 校验用户信息(wx.getUserInfo(OBJECT)返回的signature)
  2. 解密(wx.getUserInfo(OBJECT)返回的encryptedData)

B. 按照官方的说法,wx.checksession是用来检查 wx.login(OBJECT) 的时效性,判断登录是否过期;

疑惑的是(openid,unionid )都是用户唯一标识,不会因为wx.login(OBJECT)的过期而改变,所以要是没有使用x.getUserInfo(OBJECT)获得的用户信息,确实没必要使用wx.checksession()来检查wx.login(OBJECT) 是否过期;

如果使用了wx.getUserInfo(OBJECT)获得的用户信息,还是有必要使用wx.checksession()来检查wx.login(OBJECT) 是否过期的,因为用户有可能修改了头像、昵称、城市,省份等信息,可以通过检查wx.login(OBJECT) 是否过期来更新着些信息。

三、版本进化

现有bug:

  • 开发模拟时可以正常显示,但是,真机调试时以及小程序发布出来正式使用时,无法显示头像和昵称,显示的是默认头像和“微信用户”
  • 多次进入小程序则可以直接进入主页,而跳过判断绑定这一步

问题分析

下图是示例小程序的示例代码以及我的代码


可以发现,获取方式是一样的,但是传参方式不一样,那么会不会是这里的问题呢?

2022-04-26更新:完整实现

(功能早就实现了,一直没更新博客)

  • 创建云函数login,通过云函数操作才有权限获取到openid
// 云函数模板
// 每次修改代码之后都要保存并部署:在 cloud-functions/login 文件夹右键选择 “上传并部署:安装云端依赖(不上传node_modules)”const cloud = require('wx-server-sdk')// 初始化 cloud
cloud.init({// API 调用都保持和云函数当前所在环境一致env: cloud.DYNAMIC_CURRENT_ENV
})/*** 这个示例将经自动鉴权过的小程序用户 openid 返回给小程序端* * event 参数包含小程序端调用传入的 data* */
exports.main = async (event, context) => {console.log(event)console.log(context)// 可执行其他自定义逻辑// console.log 的内容可以在云开发云函数调用日志查看// 获取 WX Context (微信调用上下文),包括 OPENID、APPID、及 UNIONID(需满足 UNIONID 获取条件)等信息const wxContext = cloud.getWXContext()return {event,openid: wxContext.OPENID,appid: wxContext.APPID,unionid: wxContext.UNIONID,env: wxContext.ENV,}
}
  • 调用云函数login,并对获取到的结果进行操作,存入全局变量可以便于后续使用
wx.cloud.callFunction({name: 'login',complete: res => {// 将获取到的openid存入全局变量中app.globalData.openId = res.result.openidconsole.log(app.globalData.openId)app.globalData.haveOpenId = true// 判断数据库中是否已经有数据DB.collection('user').where({_openid: app.globalData.openId,}).get({success: res => {console.log(res)if (res.data.length == 0) {// 没找到数据wx.reLaunch({url: '/pages/register/register',})} else {// 找到了数据wx.reLaunch({url: '/pages/home/home?registered=' + true,})}}})}
})
  • 上面的代码还用到了页面传参的功能,之所以增加这个功能是因为发布小程序时审核不通过,提示要我修改成未注册用户也能体验部分功能才可以,于是增加了游客模式的页面(实际上就是判断是否已注册,没有就不让用某些功能)
  • 登陆绑定就是简单的form表单提交并比对数据库的数据了,值得注意的是,表单组件里面的标签必须要有name属性才能提交成功
  • 数据对比完之后,如果账号密码都正确,就把openid记录到数据库当中去,以后再登录的时候就可以直接查询数据库当中是否有其openid,如果有就可以直接进入主页面(上面的代码已经给出了判断)

之前的问题可能是没有使用云函数的问题,云开发省去了好多密钥之类的操作,云开发yyds!(大型项目还是老老实实code+key+……那我就不知道了)

小程序微信登陆及账号绑定功能开发笔记相关推荐

  1. 微信小程序 微信支付的商户绑定流程及开发必要条件

    一 基本流程 商户申请接入微信支付(见链接1) 商户申请绑定微信小程序(见链接2) 微信小程序审核通过商户的绑定申请 (登录微信公众平台---选择对应小程序----功能----微信支付----待关联商 ...

  2. 从0到1:基于微信小程序的瑜伽馆预约平台的开发笔记

    背景分析 随着国民健身意识越来越强,各式各样的健身模式不断出现.瑜伽也受到了大众的喜爱,瑜伽行业发展越来越快,作为馆主,你还在微信群里让你的会员使用接龙的方式进行约课吗?你还在用传统的Excel进行排 ...

  3. 微信授权绑定手机号 java_微信小程序获取手机号授权用户登录功能

    小程序中有很多地方都会用到注册用户信息的地方,用户需要填写手机号等,有了这个组件可以快速获取微信绑定手机号码,无须用户填写. 1.getPhoneNumber这个组件通过button来实现(别的标签无 ...

  4. java实现微信、手机号登陆_微信小程序获取手机号授权用户登录功能

    小程序中有很多地方都会用到注册用户信息的地方,用户需要填写手机号等,有了这个组件可以快速获取微信绑定手机号码,无须用户填写. 1.getPaDirIrkFhoneNumber这个组件通过button来 ...

  5. 借助小程序云开发实现小程序的登陆注册功能

    小程序云开发讲解视频:https://edu.csdn.net/course/detail/9604 有了云开发我们不仅可以方便的获取到用户的openid,还可以通过云开发的数据库来存储用户信息,进而 ...

  6. 微信小程序图标不支持html,微信小程序实现自定义加载图标功能

    效果图 实现思路 1.首先通过HTML+CSS实现加载动画的静态效果: 2.根据需求给每个动画设计不同的动画效果. 例如第一个加载图标的静态绘制 1.首先确定动画的盒子宽高: 2.设置盒子中每一个长方 ...

  7. wifi 小程序 透传_微信小程序实现的一键连接wifi功能示例

    本文实例讲述了微信小程序实现的一键连接wifi功能.分享给大家供大家参考,具体如下: 在已知wifi账号和wifi密码的情况下,一般采用以下的流程来连接wifi Wi-Fi 接口调用: 1.Andro ...

  8. 【微信小程序/实现】实现留言墙功能页面

    [微信小程序/实现]实现留言墙功能 一.需求分析 二.功能设计 三.页面设计 四.代码 (一)核心代码:向服务器发出请求 (二)完整代码 message.wxml message.wxss messa ...

  9. 微信小程序突然多了好多动态_让微信小程序的登陆页面有云朵悬浮的动态效果...

    微信小程序目前的火热程度相信不用多言,尤其是近期微信团队开发小程序很多之前被诟病的功能:模糊搜索,附近小程序等.最近有网友利用空余时间用小程序实现了个动态的登录页效果,所以下面我们51小程序就吧这篇文 ...

  10. php 微信小程序获取手机号_实例讲解微信小程序获取手机号授权用户登录功能...

    小程序中有很多地方都会用到注册用户信息的地方,用户需要填写手机号等,有了这个组件可以快速获取微信绑定手机号码,无须用户填写.本文主要给大家分享微信小程序获取手机号授权用户登录功能,需要的朋友参考下吧, ...

最新文章

  1. ndbcluster 批量修改表空间_Excel小技巧:使用这招快速保护你的工作表
  2. opencv-4.1.0-百度云盘下载链接-环境配置
  3. ThinkPHP 模板循环语法
  4. 一维傅里叶变换后的复数怎样理解?
  5. react 数组新增_React 新特性 Hooks 讲解及实例(二)
  6. java 析构函数_C++与Java的区别(一)
  7. [唐胡璐]Excel技巧 - 使用Excel 2007完成多人协同录入工作
  8. 服务器物理内存总是九十几,Solr总是使用超过90%的物理内存(Solr always use more than 90% of physical memory)...
  9. 比较全的 Java8 9 lambda 应用
  10. @程序员,敏捷开发防坑指南请查收!
  11. 实战java虚拟机配套代码
  12. c#二叉树 取叶子节点个数_「leetcode」222.完全二叉树的节点个数
  13. vue跨域解决方案websocket_前端跨域解决方案汇总
  14. 怎么关闭计算机139端口,win10系统关闭139端口的处理教程
  15. 光学中的几个物理量的意义
  16. xml中加html源码,XML与HTML的结合(下)_xml
  17. Chrome浏览器首次打开后未响应较长时间
  18. 数字化转型导师坚鹏:数字化时代企业管理变革与创新营销
  19. java 采集 cms_javaxinghuacms 杏花程序一个由 开发的电影管理系统,集 播放采集为一身的 Develop 238万源代码下载- www.pudn.com...
  20. Android12之OpenSL ES中Realize实例化AudioManager(十二)

热门文章

  1. 安装VMware tools好处
  2. 新华象形大字典隐私用户数据声明
  3. 最详细的选型攻略!选择工业相机必须搞懂这10大要素!(建议收藏)
  4. CentOS 设置chrome浏览器桌面图标
  5. U盘量产大致研究思路
  6. 酒店客房管理系统源代码 java_《宾馆客房管理系统》JAVA源代码
  7. Photoshop平面设计:网页设计之论摹仿和抄袭——xiame.com
  8. 49.QComboBox
  9. 多开工具,终于给找来了~
  10. 【python】python 包构建工具setup.py