uniapp app端和微信小程序端使用微信登陸以及獲取用戶信息的坑

前言

最近在用uniapp,因爲可以多端兼容,所以就入坑了擦


app端和微信小程序端使用uni.login()

app端調用uni.login返回的數據:
在這裏插入圖片描述
微信小程序端調用uni.login後返回的數據:
在這裏插入圖片描述
可以看到裏面都有code

共同點

它們都會返回 code

不同點

在app端拿到的這個code,去請求後端接口,後端用這個code去請求微信接口換取openid, session_key、unionid時會返回該code已被使用
在這裏插入圖片描述

而在小程序拿到的code是可以獲得openid, session_key的
在這裏插入圖片描述
這是爲啥?

原因:

其實可以看出來,app端使用uni.login時返回的數據多了很多東西,這是因爲在app端封裝好了,uni.login()後,會自動用該code去請求微信https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code換取access_token、openid,unionid等,所以會顯示code已被使用,要記住app端使用的微信登陸是使用Oauth 2.0 機制完成的

需要注意的是:
1.在調試的時候運行到手機的情況下,獲得到的openid、unionid什麼的都是屬於DCloud的,需要用到自己的話要自定義基座調試(一般都是打包時纔會去配置)

2.unionid只能在一定條件下才能得到,即必須綁定在微信開放平臺上,不綁定是沒有的(PS:綁定開放平臺需要開發者資質認證,認證收費的 300嘿嘿)


app端和小程序端使用uni.getUserInfo()獲取用戶信息

使用這個獲取用戶頭像,暱稱這些的前提是用戶授權了,授權過的可以直接通過getUserInfo獲取,不會報錯,也不會彈出需要授權的窗口

app端返回的數據:
這一步的用戶信息,是通過前面獲得的access_token、openid去請求微信https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID這個接口得到的,同樣的,也是封裝好了的~在這裏插入圖片描述

小程序端返回的數據:
在這裏插入圖片描述
小程序端獲取用戶信息的正確步驟應該是:
在這裏插入圖片描述
其中第5步,後端拿到3rdSessionID、encryptedData等需要解密可以獲得用戶的敏感數據,流程如下:

  • 密文 encryptedData
  • 密鑰 aesKey
  • 偏移向量 iv

1.密文和偏移向量由客戶端發送給服務端,對這兩個參數在服務端進行Base64_decode解編碼操作
2. 據3rdSessionId從緩存中獲取session_key,對session_key進行Base64_decode可以得到aesKey,aes密鑰
3. 調用aes解密方法,算法爲 AES-128-CBC,數據採用PKCS#7填充

(但其實我不是很明白爲什麼這樣操作, code可以換到用戶的openid和unionid和session_id這些敏感數據,把openid和session_id關聯一下,生成token,返回給前端,前端以後的請求拿着這個token就可以了, 而用戶暱稱這些都不屬於敏感數據,直接可以前端uni.getUserInfo拿到傳給後端就可以了,這樣不需要解密就可以拿到敏感數據,但是還多出這一步操作,搞不懂,希望知道的朋友能在下面評論一下,感激不盡!)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章