時間:2022-08-12 08:39:01 | 來源:網(wǎng)站運營
時間:2022-08-12 08:39:01 來源:網(wǎng)站運營
Web 網(wǎng)站的用戶登錄注冊方式有用戶名密碼登錄、驗證碼登錄、OAuth 第三方授權(quán)登錄等。openid
和 unionid
,簡單來說分為三步:access_token
的時序圖:https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
code
。 https://open.weixin.qq.com/connect/qrconnect?appid=wxb6a3d3490ab4c2cd&redirect_uri=https://zi.pongj.com/oauth/wechat/login&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect
<a href="https://open.weixin.qq.com/connect/qrconnect?appid=wxb6a3d3490ab4c2cd&redirect_uri=https://zi.pongj.com/oauth/wechat/login&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect"> <img title="微信" alt="微信" src="//sf6-scmcdn2-tos.pstatp.com/xitu_juejin_web/img/wechat.e0ff124.svg" class="oauth-btn" /></a>
redirect_url
的頁面code
)redirect_uri
的頁面時,會在 redirect_uri
地址后添加上臨時的 code
,我們在開發(fā) redirect_uri
頁面的時候可以判斷地址中是否包含 code
來確定用戶是否授權(quán)。code
加上 AppID 和 AppSecret 來獲取 access_token
redirect_uri
的頁面中檢查到地址中包含了 code
的參數(shù),并且用戶已授權(quán),然后我們就可以使用 code
來獲取 access_token
。code
之后,接下來網(wǎng)站應(yīng)用的步驟就是從上圖中的 5-11 步驟所示,之前的步驟在上面已經(jīng)介紹過了,接下來詳細的介紹一下 5-11 步驟操作:redirect_uri
頁面中添加路經(jīng)檢測邏輯,檢查是否帶有 code
參數(shù):如果帶有 code
參數(shù),表明用戶已同意授權(quán);如果未帶有 code
參數(shù),則說明用戶拒絕或關(guān)閉了授權(quán)頁面,此時需要重定向到登錄頁面,并提醒用戶登錄失敗。const { code } = this.$route.queryif (!code) { this.$notify.warning('請重新登錄') return this.$router.push('/login')}
第 6 步:code
參數(shù),然后就需要獲取授權(quán)的 access_token
,獲取 access_token
需要使用 AppID 和 AppSecret,由于涉及到 AppSecret 的安全性,因此我們將請求發(fā)送到后端進行操作。code
參數(shù),以及保存在環(huán)境變量或者配置文件中的 AppSecret 來獲取 access_token。https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
其中:request
或者 got
等模塊向微信開發(fā)平臺發(fā)送 GET
請求。access_token
的返回值。{ "access_token":"ACCESS_TOKEN", "expires_in":7200, "refresh_token":"REFRESH_TOKEN", "openid":"OPENID", "scope":"SCOPE", "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"}
其中,access_token
是調(diào)用授權(quán)關(guān)系接口的調(diào)用憑證,由于access_token
有效期(目前為2個小時)較短,當(dāng)access_token
超時后,可以使用refresh_token
進行刷新,刷新的操作只需要加上 refresh_token
并調(diào)用接口即可,詳細的操作可以查看官方文檔openid
和 unionid
,這兩個字段用戶對于網(wǎng)站應(yīng)用是固定不變的,因此我們可以在此處通過 openid
和 unionid
來判斷該微信用戶是否在我們的網(wǎng)站中已經(jīng)注冊過,如果注冊過,直接生成合法的 token
值返回到前端頁面即可;如果用戶未在網(wǎng)站中注冊,那么我們需要先獲取到用戶的個人信息,然后再生成 token
access_token
之后,并判斷用戶未在網(wǎng)站應(yīng)用中注冊,我們就需要獲取用戶信息,來保存用戶的授權(quán)登錄信息。https://api.weixin.qq.com/sns/userinfo?access_token=access_token&openid=openid
其中:access_token
openid
,在上一步中的返回結(jié)果中包含了 openid
{ "openid":"OPENID", "nickname":"NICKNAME", "sex":1, "province":"PROVINCE", "city":"CITY", "country":"COUNTRY", "headimgurl": "https://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0", "privilege":[ "PRIVILEGE1", "PRIVILEGE2" ], "unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"}
到這一步,我們已經(jīng)獲取到了用戶的個人信息,下面我們就需要將用戶的信息保存在我們的數(shù)據(jù)庫中,在下一次用戶掃碼微信登錄的時候,可以直接返回用戶的登錄 token
,而不需要再從微信平臺中獲取個人信息了。token
值返回給前端頁面,前端頁面來標(biāo)識用戶已登錄成功,并跳轉(zhuǎn)到網(wǎng)站的首頁。if (result.token) { await this.$store.dispatch('user/oauth', result.token) this.$notify.success('登陸成功') setTimeout(() => { this.$router.push('/') }, 3000) return}this.$notify.success('請重新登錄')setTimeout(() => { this.$router.push('/login')}, 3000)
關(guān)鍵詞:教程
微信公眾號
版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。