文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

微信小程序如何开发用户授权登陆

2024-04-02 19:55

关注

这篇文章主要介绍了微信小程序如何开发用户授权登陆,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

准备:

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

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

开发:

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

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

微信小程序如何开发用户授权登陆

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

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

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

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

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

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

小程序端 wx.login 获取code 并 wx.request 提交code给己方服务器

己方服务器 提交Appid + appSecret + code 到微信方服务器 获取 session_key & openid

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

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

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

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

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

小程序端:

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

 微信小程序如何开发用户授权登陆

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

var common = require("../Common/Common.js")

接着,在Common.js 中实现逻辑

//用户登陆
function userLogin() {
 wx.checkSession({
  success: function () {
   //存在登陆态
  },
  fail: function () {
   //不存在登陆态
   onLogin()
  }
 })
}
 
function onLogin() {
 wx.login({
  success: function (res) {
   if (res.code) {
    //发起网络请求
    wx.request({
     url: 'Our Server ApiUrl',
     data: {
      code: res.code
     },
     success: function (res) {
      const self = this
      if (逻辑成功) {
       //获取到用户凭证 存儲 3rd_session 
       var json = JSON.parse(res.data.Data)
       wx.setStorage({
        key: "third_Session", 
        data: json.third_Session
       })
       getUserInfo()
      }
      else {
 
      }
     },
     fail: function (res) {
 
     }
    })
   }
  },
  fail: function (res) {
 
  }
 })
 
}
 
function getUserInfo() {
 wx.getUserInfo({
  success: function (res) {
   var userInfo = res.userInfo
   userInfoSetInSQL(userInfo)
  },
  fail: function () {
   userAccess()
  }
 })
}
 
function userInfoSetInSQL(userInfo) {
 wx.getStorage({
  key: 'third_Session',
  success: function (res) {
   wx.request({
    url: 'Our Server ApiUrl',
    data: {
     third_Session: res.data,
     nickName: userInfo.nickName,
     avatarUrl: userInfo.avatarUrl,
     gender: userInfo.gender,
     province: userInfo.province,
     city: userInfo.city,
     country: userInfo.country
    },
    success: function (res) {
     if (逻辑成功) {
      //SQL更新用户数据成功
     }
     else {
      //SQL更新用户数据失败
     }
    }
   })
  }
 })
}

至此,小程序端的流程基本实现完毕,接着实现己方服务API

Login 接口逻辑范例

if (dicRequestData.ContainsKey("CODE"))
    {
      string apiUrl = string.Format("https://api.weixin.qq.com/sns/jscode2session?appid={0}&secret={1}&js_code={2}&grant_type=authorization_code", ProUtil.SmartAppID, ProUtil.SmartSecret, dicRequestData["CODE"]);
    
      HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(apiUrl);
      myRequest.Method = "GET";
      HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
      StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
      string content = reader.ReadToEnd();
      myResponse.Close();
      reader.Close();
      reader.Dispose();
 
      //解析
      userModel ReMsg = JSONUtil.JsonDeserialize<userModel>(content); //解析
      if ((!string.IsNullOrWhiteSpace(ReMsg.openid)) && (!string.IsNullOrWhiteSpace(ReMsg.session_key)))
      {
        // 成功 自定义生成3rd_session与openid&session_key绑定并返回3rd_session
 
      }
      else
      {
        // 错误 未获取到用户openid 或 session
      }
    }
    else
    {
      // 错误 未获取到用户凭证code
    }

UserInfoUpdate 接口在此不加赘述,用户根据自身情况对数据进行操作即可,微信方调用成功时返回的相关参数信息如下

微信小程序如何开发用户授权登陆

感谢你能够认真阅读完这篇文章,希望小编分享的“微信小程序如何开发用户授权登陆”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯