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

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

有Web开发经验的都知道,客户端用户发起请求,服务器收到请求后,能够经过把用户user_id记录到session里,而后下次经过session里面的user_id来辨别是哪一个用户,然而小程序里面对于没有惟一的标识符,只有(昵称,性别等),若是这些信息用户一旦修改,服务器就无法进行辨别了.html

①:微信官方提供了一个接口wx.login,用于用户获取本身的code,用户获取code后将code发送到服务器json

②:服务器而后经过微信官方接口,获取用户的惟一标识符openid和session_key,为了安全性,服务器不要把openid直接暴露给用户,能够本身随机生成一个字符串,而后将这个字符串与这个用户的openid session_key关联起来,而后把这个随机的字符串传送给用户,这个随机生成的字符串就代替了openid(也叫作用户态)小程序

③:用户获取到用户态后能够将其存储到storage中,由于小程序没有cookie的功能,因此之后每次发起请求,能够把storage存储的用户态放到header中后端

④:小程序携带storage再次发起请求,服务器能够从header中获取用户态来辨别是哪一个用户了,而后就能够进行业务逻辑 数据返回了!api

 

 

 

 

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

 

 

 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服务器

相关文章
相关标签/搜索