前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微信小程序授权登录与用户信息保存详解(微信报修小程序源码讲解六)

微信小程序授权登录与用户信息保存详解(微信报修小程序源码讲解六)

原创
作者头像
热心的程序员
修改2020-04-02 14:33:44
8.5K0
修改2020-04-02 14:33:44
举报
文章被收录于专栏:编程之路

微信小程序开发很重要的一步就是微信授权登录与服务器用户信息保存,很多同学并不了解流程,下面我为大家讲解一下最简单的登录流程。

提醒:小程序端源码已经更新整理,相比旧源码,新源码简洁、结构清晰、需要的同学及时找我获取源码。

微信小程序授权、服务器保存信息到数据库

下面这张图是我花了近一小时画出来的,画的不好,大家凑合看。本图详细讲解了微信小程序授权登录与用户信息保存的整个流程。

在这里插入图片描述
在这里插入图片描述

详细解释:

1、小程序端,执行 wx.login() 方法后会获取到code ,获取成功后将 code 通过 api 接口api/v1/wx/login 传递给后台。

代码语言:txt
复制
login:function(){
    wx.login({
      success: function (res) {
        if (res.code) {
          wx.request({
            url: app.serverUrl + 'api/v1/wx/login',
            data: {
              code: res.code
            },
            success: function (res) {
              if(typeof(res.data.id)=='undefined'){
                wx.showModal({
                  title: '警告',
                  content: '尚未进行授权,请点击确定跳转到授权页面进行授权。',
                  success: function (res) {
                    if (res.confirm) {
                      wx.navigateTo({url: '../auth/auth',})
                    }
                  }
                });
              }
              app.globalData.openid = res.data.openid
              app.globalData.userInfo=res.data
            }
          })
        } else {
          console.log('获取用户登录态失败!' + res.errMsg)
        }
      }
    })
  }

2、将 code、appId、appSecret 做为参数 ,调用微信接口 jscode2session

,调用成功将返回 openid 、session_key(session_key是很有用的,目前我们的代码中并没有使用到 ,他用于解密用户信息、可解密出用户unionid、手机号,这里我们用不到暂不讲解),根据 openid 查询数据库 wx_user表,存在信息直接返回,不存在用户信息则只返回 openid 。

代码语言:txt
复制
# 请求微信接口获取openid、session_key
@api.route("/v1/wx/login", methods=['GET', 'POST'])
def wxLogin():
    code = request.args.get("code")
    wxUrl = "https://api.weixin.qq.com/sns/jscode2session?appid={appId}&secret={appSecret}&js_code={code}&grant_type=authorization_code".format(
        appId=appId, appSecret=appSecret, code=code)
    req = requests.get(wxUrl)  # wxUrl 你要请求的接口地址
    jsonText = req.text  # wxUrl接口地址返回的数据字符串
    resultJson = json.loads(jsonText)  # 将json字符串转换成字典
    resultUser = WxUser.query.filter(WxUser.openid == resultJson['openid']).first()
    if resultUser is not None:
        jsonData = {'id': resultUser.id, 'openid': resultUser.openid, "avatarUrl": resultUser.avatarUrl,
                    "nickName": resultUser.nickName,
                    "isBindingMobile": resultUser.isBindingMobile}
        resultJson = jsonData
    else:
        resultJson = {"openid": resultJson['openid']}
    return resultJson

3、小程序端调用 api 接口成功后 ,若存在用户id ,则表示已经授权 ,若不存在则跳转到微信授权登录 。微信授权登录使用 button ,并设置 open-type="getUserInfo" ,这里是微信要求,不用问为什么,微信开发文档就是这样写的。

代码语言:txt
复制
<view class='title'>温馨提示</view>
<view class='info'>为保证您的正常使用,请进行授权!</view>
<button class="bt" open-type="getUserInfo" bindgetuserinfo="getUserInfo">开始使用</button>

bindgetuserinfo 绑定的是getUserInfo 方法 ,在getUserInfo方法中即可获取到用户的信息 。

代码语言:txt
复制
getUserInfo: function (e) {
    app.globalData.userInfo = e.detail.userInfo;
    wx.request({
      url: app.serverUrl + 'api/v1/wx/saveUserInfo',
      data: {
        openid: app.globalData.openid,
        nickName: app.globalData.userInfo.nickName,
        avatarUrl: app.globalData.userInfo.avatarUrl
      },
      header: {
        'content-type': 'application/json' // 默认值
      },
      success: function (res) {
        if(res.status==200){
          wx.navigateBack({
            delta: 1
          })
        }else{
          wx.showToast({
            title: '授权失败,请重试',
            icon: 'none',
            duration: 2000
          })
        }
      }
    });
  }

总结:

微信小程序授权登录和信息保存,看起来是有点麻烦 ,但是这个流程是很清晰的 ,大家只要理解了逻辑控制流程 ,就能很好的完成开发。

对此,你有什么疑问?欢迎加我个人微信 study2100 或扫码关注微信公众号与我一起交流!

qrcode_for_gh_556a3acb1fac_860.jpg
qrcode_for_gh_556a3acb1fac_860.jpg

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 微信小程序授权、服务器保存信息到数据库
  • 总结:
相关产品与服务
访问管理
访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档