微信小程序开发之用户授权登录的方法

  介绍

这篇文章将为大家详细讲解有关微信小程序开发之用户授权登录的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

准备:

微信开发者工具下载地址:https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html

微信小程序开发文档:https://developers.weixin.qq.com/miniprogram/dev/index.html

开发:

在开发之初,我们需要先明确微信方已经制定好的授权登陆流程,参看官方API——登陆接口。

你会看到微信方为开发者制定好的登陆授权流程:

微信小程序开发之用户授权登录的方法

如图,即为一个顺向的用户登陆授权的流程。

为什么说它是一个顺向的流程呢?因为在真正的小程序开发中,我们并不确定用户何时需要起调如上的登陆流程(如:用户在某些特定场景下的凭证丢失,但助教并没有退出小程序而是在小程序内部做跳转等相关操作,即有可能导致一些预期之外的异常),所以,我们需要在这个顺向的流程之外,加一层检测机制,来解决这些异常场景,而官方API中,wx。checkSession刚好可以一定程度上解决这个问题。

那么,我们的认证流程其实应该是:

——小程序wx。checkSession校验登陆态为失效

,,-成功:接口调用成功的回调函数,session_key未过期,流程结束,,,

,,-失败:接口调用失败的回调函数,session_key已过期

——》小程序端wx。登录获取代码并wx。请求提交代码给己方服务器

——》己方服务器提交Appid + appSecret +代码到微信方服务器获取session_key,openid

——》己方服务器根据session_key,openid,生成3 rd_session(<强>微信方提出的基于安全性的考虑,建议开发者不要将openid等关键性信息进行数据传输)并返回3 rd_session到小程序端

——》小程序端wx。setStorage存储3 rd_session(在后续用户操作需要凭证时附带该参数)

——》小程序端wx。getUserInfo获取用户信息+ wx。getStorage获取3 rd_session数据后,一并wx。请求提交给己方服务器

——》己方服务器SQL用户数据信息更新,流程结束;

思路整理完毕,接下来实现流程

小程序端:

在小程序中,新建一个通用的JS做基础支持

微信小程序开发之用户授权登录的方法

并在一些需要引用的页面进行引用

var  common =,要求(“. ./共同/Common.js")

接着,在常见的。js中实现逻辑

//用户登陆   function  userLogin (), {   wx.checkSession({才能   成功,,,:,function  (), {   ,,,,,//存在登陆态   ,,,},   ,,,失败:,function  (), {   ,,,,,//不存在登陆态   ,,,,,onLogin ()   ,,,}   })才能   }      function  onLogin (), {   wx.login({才能   成功,,,:,function  (res), {   ,,,,,if  (res.code), {   ,,,,,,,//发起网络请求   ,,,,,,,wx.request ({   ,,,,,,,,,url:, & # 39; Our  Server  ApiUrl& # 39;   ,,,,,,,,,数据:,{   ,,,,,,,,,,,代码:res.code   ,,,,,,,,,},   ,,,,,,,,,成功:,function  (res), {   ,,,,,,,,,,,const  self =,   ,,,,,,,,,,,if (逻辑成功),{   ,,,,,,,,,,,,,//获取到用户凭证,存儲,3 rd_session    ,,,,,,,,,,,,,var  json =, JSON.parse (res.data.Data)   ,,,,,,,,,,,,,wx.setStorage ({   ,,,,,,,,,,,,,,,关键:,“third_Session",,   ,,,,,,,,,,,,,,,数据:json.third_Session   ,,,,,,,,,,,,,})   ,,,,,,,,,,,,,getUserInfo ()   ,,,,,,,,,,,}   ,,,,,,,,,,,else  {      ,,,,,,,,,,,}   ,,,,,,,,,},   ,,,,,,,,,失败:,function  (res), {      ,,,,,,,,,}   ,,,,,,,})   ,,,,,}   ,,,},   ,,,失败:,function  (res), {   ,,   ,,,}   })才能      }      function  getUserInfo (), {   wx.getUserInfo({才能   成功,,,:,function  (res), {   ,,,,,var  userInfo =res.userInfo   ,,,,,userInfoSetInSQL(用户信息)   ,,,},   ,,,失败:,function  (), {   ,,,,,userAccess ()   ,,,}   })才能   }      function  userInfoSetInSQL(用户信息),{   wx.getStorage({才能   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

微信小程序开发之用户授权登录的方法