博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小程序开发--API之登录授权逻辑
阅读量:5033 次
发布时间:2019-06-12

本文共 2053 字,大约阅读时间需要 6 分钟。

小程序登录授权获取逻辑

原生的小程序提供许多开放接口供使用者开发,快速建立小程序内的用户体系。

下面将小程序校验、登录、授权、获取用户信息诸多接口串联起来,以便更直观的认识到这些接口是如何在实际应用中使用的。

一、 检验、登录

wx.checkSession({    success: function() {       //session_key 未过期,并且在本生命周期一直有效    },    fail: function() {        //session_key 已经失效,需要重新执行登录流程        wx.login({            success: (res) => { if (res.code) { //发起网络请求  wx.request({ //开发者服务器通过code换取用户唯一标识openid 和 会话密钥session_key。 url: 'https://test.com/onLogin', data: { // 临时登录凭证code,并回传到开发者服务器  code: res.code }, success: function(result) { //返回业务数据,前后端交互身份识别  } }) } else { console.log('登录失败!' + res.errMsg) } } }); } })

login说明:

  1. 小程序调用wx.login() 获取 临时登录凭证code ,并回传到开发者服务器。

  2. 开发者服务器以code换取 用户唯一标识openid 和 会话密钥session_key。

之后开发者服务器可以根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份。

会话密钥session_key有效性:

开发者如果遇到因为session_key不正确而校验签名失败或解密失败,请关注下面几个与session_key有关的注意事项。

  1. wx.login()调用时,用户的session_key会被更新而致使旧session_key失效。开发者应该在明确需要重新登录时才调用wx.login(),及时通过登录凭证校验接口更新服务器存储的session_key。

  2. 微信不会把session_key的有效期告知开发者。我们会根据用户使用小程序的行为对session_key进行续期。用户越频繁使用小程序,session_key有效期越长。

  3. 开发者在session_key失效时,可以通过重新执行登录流程获取有效的session_key。使用接口wx.checkSession()可以校验session_key是否有效,从而避免小程序反复执行登录流程。

  4. 当开发者在实现自定义登录态时,可以考虑以session_key有效期作为自身登录态有效期,也可以实现自定义的时效性策略。

二、 授权获取用户信息

// 可以通过 wx.getSetting 先查询一下用户是否授权了 "scope.record" 这个 scopewx.getSetting({    success(res) {        if (!res.authSetting['scope.record']) {            wx.authorize({                scope: 'scope.record',                success() {                    // 用户已经同意小程序使用录音功能,后续调用 wx.startRecord 接口不会弹窗询问                    wx.startRecord()                }            })        }    }})

注意:wx.authorize({scope: "scope.userInfo"}),无法弹出授权窗口,请使用 <button open-type="getUserInfo"></button>

如果用户已经授权,要获取用户信息,调下面接口:

wx.getSetting({    success: (res)=>{        if (res.authSetting['scope.userInfo']) {            // 已经授权,可以直接调用 getUserInfo 获取头像昵称            wx.getUserInfo({              withCredentials: true,              success: (res) => { console.log(res); } }) } } });

注意:

  1. 当用户未授权过,调用该接口将直接报错
  2. 当用户授权过,可以使用该接口获取用户信息

转载于:https://www.cnblogs.com/lodadssd/p/9132246.html

你可能感兴趣的文章
指针从函数内部带回返回值
查看>>
在使用webView播放flash或视频文件时无法关闭声音的问题
查看>>
redhat 7 源码安装 mysql5.5.49
查看>>
CCP浅谈
查看>>
NAT虚拟网络配置
查看>>
c#部分---需要实例化的内容;
查看>>
技术项目,问题
查看>>
线程池总结
查看>>
Learning to rank (software, datasets)
查看>>
git常见问题
查看>>
.NETFramework:template
查看>>
HM16.0之帧内模式——xCheckRDCostIntra()函数
查看>>
Jmeter性能测试 入门
查看>>
安卓动画有哪几种?他们的区别?
查看>>
Nodejs学习总结 -Express入门(一)
查看>>
ssh 连接原理及ssh-keygen
查看>>
vs2013编译qt程序后中文出现乱码
查看>>
【转】IOS数据库操作SQLite3使用详解
查看>>
Android官方技术文档翻译——ApplicationId 与 PackageName
查看>>
【转】ButterKnife基本使用--不错
查看>>