您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么用python代碼實現小程序登錄流程時序”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“怎么用python代碼實現小程序登錄流程時序”文章能幫助大家解決問題。
小程序可以通過微信官方提供的登錄能力方便地獲取微信提供的用戶身份標識,快速建立小程序內的用戶體系。
調用wx.login()獲取臨時登錄憑證code,并回傳到開發者服務器。
調用auth.code2Session接口,換取用戶唯一標識 OpenID和會話密鑰 session_key。
之后開發者服務器可以根據用戶標識來生成自定義登錄態,用于后續業務邏輯中前后端交互時識別用戶身份。
會話密鑰session_key
是對用戶數據進行加密簽名的密鑰。為了應用自身的數據安全,開發者服務器不應該把會話密鑰下發到小程序,也不應該對外提供這個密鑰。
臨時登錄憑證 code 只能使用一次
1 小程序端執行wx.login()獲取code
2 將1中的code發送到后端,后端調用auth.code2Session這個接口,得到openid和session_key
3 自定義登入狀態,我們生成一個key與openid和session_key相綁定。把key返回到小程序中
4 小程序端保存,然后下次請求需要登入的接口的時候,把key帶上。
# app.js的onLaunch中 因為登錄是用戶感覺不到的 App({ onLaunch: function () { let that = this // 登錄 wx.login({ success: res => { // 發送 res.code 到后臺換取 openId, sessionKey, unionId console.log(res.code) //拿到code wx.request({ url:that.globalData.baseurl+"/login/", data:{'code':res.code}, method:'POST', success(e){ console.log(e.data) // wx.setStorageSync("token", e.data.data.token) } }) } }), globalData: { userInfo: null, baseurl:"http://127.0.0.1:8000" } # dango后臺中 # urls.py 路由中 path('login/', user.Login.as_view()), # user.py中 from rest_framework.views import APIView from rest_framework.response import Response from api.wx import wx_login import hashlib, time from django.core.cache import cache from api.models import Wxuser class Login(APIView): def post(self, request): param = request.data print(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) if user_data: val = user_data['session_key'] + "&" + user_data['openid'] md5 = hashlib.md5() md5.update(str(time.clock()).encode("utf-8")) key = md5.hexdigest() cache.set(key, val) # 放進內存redis庫中,把key傳給前端當token.下次前臺帶著key就能拿到val has_user = Wxuser.objects.filter(openid=user_data['openid']).first() # 判斷openid是否存在 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, "data": "無效的code"}) # models.py中: from django.db import models class Wxuser(models.Model): id = models.AutoField(primary_key=True) openid=models.CharField(max_length=255) name = models.CharField(max_length=50) avatar = models.CharField(max_length=200) language = models.CharField(max_length=50) province = models.CharField(max_length=50) city = models.CharField(max_length=50) country = models.CharField(max_length=50) #gender = models.CharField(max_length=50) creat_time = models.DateTimeField(auto_now_add=True) update_time = models.DateTimeField(auto_now=True) def __str__(self): return self.openid # settings.py中:自己注冊的微信小程序信息 AppId="" AppSecret="" code2Session="https://api.weixin.qq.com/sns/jscode2session?appid={}&secret={}&js_code={}&grant_type=authorization_code" # wx_login.py中: from api.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數據 json_response = response.json() # 把json數據轉換為字典 if json_response.get('session_key'): return json_response else: return False # cache緩存配置redis數據庫
關于“怎么用python代碼實現小程序登錄流程時序”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。