您好,登錄后才能下訂單哦!
這篇文章主要介紹怎么實現小程序的登錄與授權,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
登錄:
如果我們要實現小程序的登錄,不妨嘗試在開啟小程序的時候完成登錄。也就是說我們可以在app.js中的onlaunch方法中添加小程序登錄代碼。
如下:
//微信的登錄方法wx.login({ success: res => { //登錄成功后會返回一個微信端提供的 code ,用來自定義登錄使用 console.log("code",res.code); //向自己的后臺發送請求 wx.request({ url: this.globalData.URL+'login/', data:{ code:res.code }, header:{ "content-type": "application/json" }, method:"POST", success:function(e){ console.log(e) //請求成功后會返回一個自己后端生成的 token 用來做其他操作的校驗,把token保存在本地 wx.setStorageSync("token", e.data.data.token) } }) // 發送 res.code 到后臺換取 openId, sessionKey, unionId } })
后端代碼:
from rest_framework.views import APIViewfrom rest_framework.response import Responsefrom app01.wx import Wx_loginfrom django.core.cache import cachefrom app01 import modelsimport timeimport hashlibclass Login(APIView): def post(self,request): param = request.data if param.get("code"): #Wx_login是微信為我們提供的登錄方法,這里的data已經有一個session_key和openid了 data=Wx_login.login(param.get("code")) if data: # 1 session_key+時間戳等到一個key.(md5 md5=hashlib.md5() md5.update(data.get("session_key").encode("utf8")) md5.update(str(time.time()).encode("utf8")) key=md5.hexdigest() #2 session_key與openid做綁定等到val val=data.get("session_key")+'&'+data.get("openid") #3key->val存到redis, cache.set(key,val) #4把openid存到數據庫 user_data=models.Wxuser.objects.filter(openid=data.get("openid")).first() if not user_data: models.Wxuser.objects.create(openid=data.get("openid")) #5把key返回給小程序 return Response({"code": 200, "msg": "suc","data":{"token":key}}) else: return Response({"code": 202, "msg": "code無效"}) else: return Response({"code":201,"msg":"缺少參數"})
Wx_login
import requests# appid={}&secret={}&js_code={}from app01.wx import settingsdef login(code): #code2Session是wx提供的url,填入你的appid和appsecret以及前端發送來的code url=settings.code2Session.format(settings.AppId,settings.AppSecret,code) reponse=requests.get(url=url) #得到的data里面有session_key和openid。 data=reponse.json() print(data) if data.get("session_key"): return data else: return False
settings
#你注冊的小程序的 appid 和 appsecret,code2Session是有官方提供的。pay_mchid是商鋪號,需要工商證才能辦理,所以自己沒法搞。 AppId="wx69a0dca5c6b02a43"AppSecret="9d0f80642f4861b53df04a2f7bd65a59"code2Session="https://api.weixin.qq.com/sns/jscode2session?appid={}&secret={}&js_code={}&grant_type=authorization_code"pay_mchid ='1415981402'pay_apikey = 'xi34nu5jn7x2uujd8u4jiijd2u5d6j8e'
這樣登錄就完成了
授權
html就是一個按鈕加一個點擊事件,就不寫了,主要看點擊事件做了什么
luying: function () { //這個方法的作用是獲取配置,看所有的權限 wx.getSetting({ //獲取成功后進入 success(res) { console.log("res", res.authSetting['scope.record']) //authSetting是這個權限的列表,這一句是看里面有沒有錄音這個權限 if (!res.authSetting['scope.record']) { //沒有權限的話就會走這一句,這個方法的作用是獲取權限 wx.authorize({ //固定寫法權限就是scope.xxx這樣的 scope: 'scope.record', success() { // 用戶已經同意小程序使用錄音功能,后續調用 wx.startRecord 接口不會彈窗詢問 wx.startRecord() }, //在失敗前就已經調用了上面的獲取權限,如果沒有給權限的話,就會走這個方法。 fail() { console.log("你沒有授權") } }) } else { // wx.startRecord() } } }) },
獲取用戶信息的權限
因為用戶信息可能會帶一些敏感信息,比如說session_key或者openid等等,在前端想要獲取信息的話,就必須請求權限。
需要注意,這種方式是錯誤的
<button bind:tap="info">用戶信息</button>
必須要這樣寫才行,才行,這樣,在獲取請求的同時,會把一些關鍵的東西傳進點擊事件里。
<button open-type="getUserInfo" bindgetuserinfo="info1">獲取用戶信</button>
js
info1: function (res) { console.log(res, "按鈕") // wx.getUserInfo({ // success: function (res) { // console.log(res, "用戶信息") // } // }) var that = this //這個方法是用來看你session_key有沒有過期的 wx.checkSession({ success() { //session_key 未過期,并且在本生命周期一直有效 wx.request({ url: app.globalData.URL + "userinfo/", data: { //這個東西就是用戶信息了,里面包含敏感信息,是按鈕點擊的時候傳進來的 encryptedData: res.detail.encryptedData, //同上,也是點擊的時候傳進來的 iv: res.detail.iv, //登錄成功后返回的token帶上 token: wx.getStorageSync("token") }, header: { "content-type": "application/json" }, method: "POST", success: function (e) { console.log(e) } }) }, fail() { // session_key 已經失效,需要重新執行登錄流程 wx.login() //重新登錄 } }) }
以上是“怎么實現小程序的登錄與授權”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。