小程序如何判断用户(后台使用Django)

小程序如何判断用户是哪个:

有Web开发经验的都知道,客户端用户发起请求,服务器收到请求后,可以通过把用户user_id记录到session里,然后下次通过session里面的user_id来辨别是哪个用户,然而小程序里面对于没有唯一的标识符,只有(昵称,性别等),如果这些信息用户一旦修改,服务器就没法进行辨别了,微信官方提供了一个接口wx.login,用于用户获取自己的code,用户获取code后将code发送到服务器,服务器然后通过微信官方接口,获取用户的唯一标识符openid和session_key,为了安全性,服务器不要把openid直接暴露给用户,可以自己随机生成一个字符串,然后将这个字符串与这个用户的openid session_key关联起来,然后把这个随机的字符串传送给用户,这个随机生成的字符串就代替了openid(也叫做用户态)。用户获取到用户态后可以将其存储到storage中,因为小程序没有cookie的功能,所以以后每次发起请求,可以把storage存储的用户态放到header中,这样服务器可以从header中获取用户态来辨别是哪个用户了,然后就可以进行业务逻辑 数据返回了!

①:第一次进入此小程序的用户:

  onLogin: function () {
    console.log(‘logining1‘)
    this.getuserinfo
    var that = this
      wx.login({   //这里请求wx.login接口获取code
        success(res) {
          if (res.code) {
            //发起网络请求
            wx.request({
              url: ‘http://127.0.0.1:8000/login‘,  //将code传给后端
              data: {
                code: res.code,
                userInfo: app.globalData.userInfo.nickName
              },
              success: function (res) {
                wx.setStorageSync(‘openid‘, res.data.user_uuid)   //请求成功后,后端返回的唯一标识符(用户态),存储到Storage中
              },
            })
          } else {
            console.log(‘登录失败!‘ + res.errMsg)
          }
        }
      })

  },

②:服务器请求微信接口,获取用户的openid

#新用户进入此视图获取session_key和openid,和用户态,并将它们关联
#老用户 session_key过期的话会进入此视图重新获取session_key和新用户态
def login(request):
    code = request.GET[‘code‘]
    req_result = requests.get(‘https://api.weixin.qq.com/sns/jscode2session?appid=‘+‘你的小程序appid‘+‘&secret=‘+

‘你的小程序secret_key‘+‘&js_code=‘+当前用户的code+‘&grant_type=‘+‘authorization_code‘,
                               timeout=3, verify=False)
    userdata = req_result.json()
    user_uuid = str(uuid.uuid4()) # 随机生成字符串user_uuid,自定义登录态,暴露给给用户的唯一标识
    try:
        user = User.objects.get(openid=userdata[‘openid‘])
        #如果已经存在的用户user,只需要改变他的session_key即可
        user.session_key = userdata[‘session_key‘]
        #保存新的登录态
        user.user_uuid = user_uuid
        user.save()
    #第一次登录,保存用户的登录信息,openid
    except:
        userinfo = request.GET.get(‘userInfo‘)
        print(userinfo)
        user = User(openid=userdata[‘openid‘],
                    session_key=userdata[‘session_key‘],user_uuid=user_uuid,username=userinfo)
        user.save()
    #将登录态信息返回给微信用户
    res = {
        ‘user_uuid‘:user_uuid
    }
    return JsonResponse(res)

③:小程序的session_key,以及下次如何带着用户态 请求服务器

这里有个session_key还未解释,session_key的作用:当用户把自己的信息发送给服务器,这里会通过微信接口的session_key进行信息加密,进一步保证用户数据的安全性,session_key有时效,用户长时间不登陆小程序,或者时间过长,session_key都会过期,过期就需要重新去微信官方接口申请新的session_key,并且服务器返回给用户一个新的用户态。

  //用户登陆
  userLogin: function () {
    var that = this;    //这里提前复制一份this为that,因为走到下面的函数后,this对象不在是当前的app
    wx.checkSession({   //这里的函数是微信接口用于判断用户的session_key是否过期
      success: function () {
        //存在登陆态
        console.log(‘存在登录态‘);
        that.getuserinfo;//使用that
        wx.navigateTo({
          url: ‘../logs/logs‘,
        })
      },
      fail: function () {
        //不存在登陆态,去获取登录态
        that.onLogin()
      }
    })
  },

原文地址:https://www.cnblogs.com/szj666/p/11988495.html

时间: 2024-11-05 11:28:56

小程序如何判断用户(后台使用Django)的相关文章

python获取微信小程序openid及用户信息

填坑记录:1.个人微信公众订阅号是不能申请微信认证的.公众号的类型在注册时一旦选择就不能更改,微信公众号认证的功能除个人订阅号外,都可以申请认证,因而个人订阅号不能申请认证.这句话的意思就是个人订阅号无法开发小程序. 2.个体户营业执照(个体户)可申请微信服务号并申请开发小程序,但需微信认证复用资质并用新邮箱注册小程序账号 3.微信开发工具创建微信小程序填写的appid是小程序的appid(不是微信公众号的),不能是个人小程序的appid,个人小程序没有获取用户信息的权限 4.调用接口获取用户信

43.编写一个程序,判断用户输入的字符是否是数字,若是数字,则输出“a numerical character”

//1.学习到字符输入 //2.判断字符 #include<iostream> using namespace std; int main() { char a; cout<<"please input a charcter: "<<endl; cin>>a; if(a>'0'&&a<'9') { cout<<"it's a numerical character!"<&l

微信小程序前台的用户数据入库(后台Laravel)

首先 我们可以看到微信小程序官方 文档 wx.login api-login.jpg 通过此图 我们知道 前台要传 一个 code给后台,后台拿到code 并结合appid和appsecret请求微信接口服务,拿到openid和session_key 查阅文档 我们可以清楚知道 后台要获得用户数据 就需要前台除了传code 还需要传 iv和 encryptedData iv和encryptedData 后台拿到这两个 并结合拿code去请求得到的session_key便可以解密获得用户数据 包括

基于ThinkPHP框架小程序获取微信用户信息并将存进数据库

场景描述:在微信小程序中,我们可能用到很多种登陆方式,例如用手机作为标识登陆亦或者用微信信息作为标识登陆(但这写都要看你的项目需要),在这里我说一下如何使用微信信息作为标识登陆. 编程思路:分三步走,第一步微信信息获取发送给后台->第二步解密微信信息验证数据库->登陆成功保存缓存并且更新token 小程序前端处理 1 //调用登录接口,获取 code 2 wx.login({ 3 success: function (res) { 4 //微信js_code 5 that.setData({

微信小程序商城 带java后台源码

微信小程序商城(Java版) 演示地址 账号:admin 密码:admin 小程序体验码: 技术选型 1 后端使用技术 1.1 springframework4.3.7.RELEASE 1.2 mybatis3.1.0.MyBatis-Plus 3.1.0 1.3 shiro1.3.2 1.4 servlet3.1.0 1.5 druid1.0.28 1.6 slf4j1.7.19 1.7 fastjson1.2.30 1.8 poi3.15 1.9 velocity1.7 1.10 quart

小程序--重新获取用户授权

微信小程序这个设计确实给开发者带来了一些不便. 当用户拒绝之后没法在短时间内再次弹窗提示用户授权,如果非要获取用户信息的话,业务流程就受阻了. 但是,小程序还是留了一个口子. wx.openSetting({success:(res)=>{console.log(res);}});

微信小程序 + mock.js 实现后台模拟及调试

一.创建小程序项目 mock.js 从 https://github.com/nuysoft/Mock/blob/refactoring/dist/mock.js 下载 api.js:配置模拟数据和后台接口数据,通过 DEBUG = true;//切换数据入口 let API_HOST = "http://xxx.com/xxx"; let DEBUG = true;//切换数据入口 var Mock = require('mock.js') function ajax(data =

小程序的探索之旅--与Django的数据交互

django服务端:(获取和返回) Django获取客户端发来的请求request: 首先,要知道请求的类型(method):POST/GET 然后用get方法获取需要的内容: request.GET.get() request.POST.get() Django返回响应: 返回字典类型的数据 dic = { 'name': user.name, 'email': user.email, 'num': user.number } return JsonResponse(dic) 小程序客户端 客

微信小程序实现获取用户信息并存入数据库操作示例

微信小程序获取用户信息简单,但是在存入自己服务器数据库的过程中研究了一天多的时间,并且网上搜索不到该资源,故发出来供大家参考. index.js ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 Page({  data: {   nickNam