小程序如何判斷用戶(後臺使用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服務器

相關文章
相關標籤/搜索