小程序的登录

Posted Rannie

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小程序的登录相关的知识,希望对你有一定的参考价值。

小程序的登录

官方文档

说明:

  1. 调用 wx.login() 获取 临时登录凭证code ,并回传到开发者服务器。
  2. 将 1 中的 code 发送到后端,调用 auth.code2Session 接口,换取 用户唯一标识 OpenID会话密钥 session_key
  3. 自定义登录状态,生成一个 key 与 openid 和 session_key 相绑定的字符串,把 key 返回到小程序中
  4. 小程序端保存,然后下次请求需要登录接口的时候,把 key 带上

注意:

  1. 会话密钥 session_key 是对用户数据进行 加密签名 的密钥。为了应用自身的数据安全,开发者服务器不应该把会话密钥下发到小程序,也不应该对外提供这个密钥
  2. 临时登录凭证 code 只能使用一次

自定义登录状态

//app.js
App({
  onLaunch: function () {
    let that = this
    // 登录
    // wx.login() 获取 code
    wx.login({
      success: res => {
        // 发送 res.code 到后台换取 openId, sessionKey, unionId
        // console.log(res)
        wx.request({
          url: that.globalData.baseurl+"login/",
          data:{"code":res.code},
          method:"POST",
          success(e){
            // console.log(e)
            wx.setStorageSync(\'token\', e.data.data.token)
          }
        })
      }
    })
  },
  globalData: {
    userInfo: null,
    baseurl: "http://127.0.0.1:8000/"
  }
})

后端,新建文件夹 wx ,在 wx 文件夹下创建 settings.py 文件和 wx_loging.py

settings.py

AppId = \'wxb662c1fdacbcb9426\'
AppSecret = \'98e19d90eb1169a50e714122edd09b316\'

code2Session = \'https://api.weixin.qq.com/sns/jscode2session?appid={}&secret={}&js_code={}&grant_type=authorization_code\'

wx_loging.py

from app01.wx import settings

import requests

def get_login_info(code):
    code_url = settings.code2Session.format(settings.AppId, settings.AppSecret, code)
    # 登陆接口校验
    response = requests.get(code_url)
    json_response = response.json()
    if json_response.get(\'session_key\'):
        return json_response
    else:
        return False

views.py

class Login(APIView):
    def post(self, request):
        param = request.data
        if not param.get(\'code\'):
            return Response({\'status\': 1, \'msg\': \'缺少参数\'})
        else:
            code = param.get(\'code\')
            user_data = wx_login.get_login_info(code)
            # {\'session_key\': \'0ghT3CyfdxXrT4FF6vaowQ==\', \'openid\': \'o_36qT4bcvwdtarkY4pzl0PfE35E\'}
            if user_data:
                val = user_data[\'session_key\'] + \'&\' + user_data[\'openid\']
                md5 = hashlib.md5()
                md5.update(str(time.clock()).encode(\'utf-8\'))
                md5.update(user_data[\'session_key\'].encode(\'utf-8\'))
                key = md5.hexdigest()
                cache.set(key, val)
                has_user = Wxuser.objects.filter(openid=user_data[\'openid\']).first()
                if not has_user:
                    Wxuser.objects.create(openid=user_data[\'openid\'])
                return Response({
                    \'status\': 0,
                    \'msg\': \'ok\',
                    \'data\': {\'token\': key}
                })
            else:
                return Response({"status": 2, "msg": \'无效的 code\'})

自定义登录状态,生成一个 key 与 openid 和 session_key 相绑定的字符串,把 key 返回到小程序中

小程序端保存,然后下次请求需要登录接口的时候,把 key 带上

以上是关于小程序的登录的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序实现微信登陆(TP5后端)

小程序各种功能代码片段整理---持续更新

Android获取各个应用程序的缓存文件代码小片段(使用AIDL)

提效小技巧——记录那些不常用的代码片段

导航 PopUpToInclusive 不起作用?重新打开应用程序时,它会打开登录片段而不是电子邮件登录片段

Android小部件,启动一个片段?