亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

thinkjs微信中控之微信鑒權登陸的實現代碼

2024-05-06 16:54:07
字體:
來源:轉載
供稿:網友

前言

上一篇文章大概寫了一下如何搭一個微信中控服務: 【thinkjs搭建微信中控服務】 。

接下來這篇,專門寫一下如何在此基礎上擴展出來一個比較好用的微信鑒權登陸的方案。

由于這一段的邏輯著實有點繞,所以就單獨拿出來寫了。

有時候,調用方甚至可以通過這個方案,進行多公眾號openid的之間的關聯。

官方說明

開發文檔

微信文檔地址:傳送門

鑒權邏輯

  • 前端跳轉到以下url,重定向或者代碼跳轉都可以:https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
  • 彈出是否同意授權的框,用戶同意授權(如果是靜默授權,就不會彈出同意框),然后頁面會重定向到上面鏈接的redirect_uri地址(一般是開發者處理下一步鑒權邏輯的服務端API),并且會帶上code參數。
  • 服務端拿到code之后,調用以下api來獲取網頁授權的access_token和用戶的openid:https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

拿到openid之后,理論上鑒權的邏輯就算完成了。

開發者可以繼續用openid和access_token去獲取用戶信息;或者進行一些其他的業務流程。

具體的參數說明看微信的官方文檔就可以了。

中控邏輯

第一步:頁面跳轉至中控API

業務調用方會有自己的登陸邏輯,只需要獲取到當前調用接口的用戶的openid,然后再進行接下來的業務邏輯即可。

前端調用業務接口的時候,如果服務端發現當前訪問用戶沒有登陸狀態,就會告訴前端需要鑒權,并且把需要跳轉的中控API鏈接響應給前端。

然后前端就開始往中控的API鏈接跳轉。

第二步:中控重定向到微信API

相關代碼

// 接口 - 鑒權獲取codeasync go_authAction() {  let that = this;  let {back, serve = ''} = that.get();  if (think.isEmpty(back)) {    return that.json({code: 1, msg: '參數不正確'})  }  let newBack = encodeURIComponent(back);  let redirectUri = `${baseHost}/api/open/wx/login_wechat?${encodeURIComponent(`back=${newBack}&wxid=${that.wxConfig.id}&serve=${serve}`)}`;  let url = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${that.wxConfig.appid}&redirect_uri=${redirectUri}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect`  that.redirect(url);}

作用:

鑒權獲取code

地址:

baseHost + /open/wx/go_auth

參數:

 

參數名 必選 說明
wxid 對應配置公眾號的id,告訴中控用哪個公眾號鑒權
back 跳轉到鑒權鏈接之前的頁面完整url,便于鑒權完畢后重定向回之前頁面
serve 調用方api回調地址,在鑒權邏輯完成后,會攜帶openid重定向回這個地址

 

描述:

我這里默認都是靜默授權。

在這里可以看到代碼里面,中控把調用方傳過來的 wxid , back 和 serve 三個參數拼接到了微信API的回調鏈接 redirect_uri 里面。

第三步:微信回調中控API

相關代碼

async login_wechatAction() {  let that = this;  let {code, back, serve = ''} = that.get();  if (think.isEmpty(code) || think.isEmpty(back)) {    return that.json({code: 1, msg: '參數不正確'})  }  let newBack = encodeURIComponent(back);  let apiWxController = that.controller('private/wx');  let openid = await that._getOpenIdByAuthCode(that.wxConfig.id, code);  let backUrl = `${serve}?wxid=${that.wxConfig.id}&openid=${openid}&redirect=${newBack}`;  that.redirect(backUrl);}_getOpenIdByAuthCode(wxid, code){  let that = this;  let {appid, secret} = await that.controller('common').getWxConfigById(wxid);  let {data} = await axios({    method: 'get',    url: `https://api.weixin.qq.com/sns/oauth2/access_token?appid=${appid}&secret=${secret}&code=$[code]&grant_type=authorization_code`  })  return data.openid}

作用:

通過微信回調傳回來的code,獲取openid

地址:

baseHost + /open/wx/login_wechat

參數:

 

參數名 必選 說明
wxid 對應配置公眾號的id,告訴中控用哪個公眾號鑒權
code 微信回傳的code
back 跳轉到鑒權鏈接之前的頁面完整url,便于鑒權完畢后重定向回之前頁面(上一步拼接的)
serve 調用方api回調地址,在鑒權邏輯完成后,會攜帶openid重定向回這個地址(上一步拼接的)

 

描述:

這里中控拿到code之后,去獲取openid。 獲取完之后,重定向回 serve (業務系統)地址,并把獲取到的 openid 和 back 作為參數傳回去

第四步:業務系統自行處理

接下來業務系統就能通過開放的回調地址(上面的 serve ),來拿到以下信息:

  • openid (微信ID),
  • redirect (上面的 back ,最初用戶在前端調用接口的頁面地址)

這時候就能用這個openid去處理自己的登陸邏輯,比如獲取用戶信息,緩存session保存登陸狀態之類的。

然后再重定向回 back 地址,也就是用戶在鑒權之前訪問的頁面。

鑒權結束

簡單說就是以下邏輯

  • 前端 調用 業務接口 發現沒有登陸狀態,告訴前端往中控跳!
  • 前端 跳轉至 中控API 拼接接下來要回調的參數
  • 中控 重定向至 微信API 獲取code
  • 微信 重定向至 中控API 獲取openid
  • 中控 重定向回 業務回調API 拿到openid,保存用戶登陸狀態
  • 業務 重定向回 前端
  • 前端 調用 業務接口 發現有登陸狀態了,完事兒

雖然歷經的跳轉和重定向看起來很多,但是實際用起來,其實是很快的,用戶基本上沒有什么感知。

而且對于業務調用方來說,只需要提供一個回調地址即可,然后在回調里面等著openid傳過來就好,剩下的交給中控自己去來回蹦噠吧。

結尾

需要注意的是,公眾號的后臺需要配置好以下信息。

  1. JS接口安全域名:就是前端的訪問域名。
  2. 網頁授權域名:中控API域名。
  3. ip白名單:中控的ip地址。

否則是沒有權限鑒權的。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩在线精品视频| 欧美在线精品免播放器视频| 色午夜这里只有精品| 亚洲欧美一区二区精品久久久| 日本一区二区三区在线播放| 亚洲乱码国产乱码精品精天堂| 91九色视频在线| 成人欧美一区二区三区黑人孕妇| 亚洲精品456在线播放狼人| 欧美激情一区二区三区久久久| 92福利视频午夜1000合集在线观看| 亚洲成人激情小说| 在线播放精品一区二区三区| 欧美日韩中文字幕| 国产日韩在线观看av| 成人动漫网站在线观看| 欧美国产日韩精品| 在线观看日韩视频| 亚洲第一色在线| 国产精品久久一区主播| 91免费版网站入口| 在线成人激情视频| 亚洲成人三级在线| 日韩成人激情视频| 欧美在线性爱视频| 亚洲国产成人久久综合一区| 久久九九亚洲综合| 91精品久久久久久久久久| 久久久精品国产亚洲| 亚洲第一区第一页| 亚洲一区二区三区毛片| 91麻豆国产精品| 78色国产精品| 97精品国产97久久久久久免费| 欧美激情一区二区久久久| 久久精品电影一区二区| 日韩经典中文字幕在线观看| 2020欧美日韩在线视频| x99av成人免费| 色噜噜狠狠狠综合曰曰曰| 日韩中文字幕国产精品| 久久99国产精品自在自在app| 亚洲天堂av电影| 国产一区二区色| 成人性生交xxxxx网站| 国产精品久久久久久亚洲调教| 久久久久久欧美| 亚洲午夜未删减在线观看| 亚洲精品电影网站| 欧美猛男性生活免费| 一道本无吗dⅴd在线播放一区| 久久久久免费视频| 91精品久久久久久久久青青| 成人黄色午夜影院| 亚洲小视频在线观看| 国产精品美女在线观看| 亚洲精品日韩丝袜精品| 7777精品视频| 91精品国产自产在线| 色婷婷综合久久久久中文字幕1| 日韩成人中文电影| 亚洲久久久久久久久久| 亚洲一区二区三区乱码aⅴ| 久久精品久久久久久国产 免费| 亚洲午夜国产成人av电影男同| 亚洲女同精品视频| 丝袜亚洲另类欧美重口| 久热精品视频在线观看| 亚洲欧美自拍一区| 午夜剧场成人观在线视频免费观看| 亚洲影视中文字幕| www.欧美精品| 久久精视频免费在线久久完整在线看| 成人网中文字幕| 亚洲欧美制服另类日韩| 97久久精品视频| 欧美日韩亚洲网| 中文字幕在线国产精品| 亚洲影院在线看| 国产欧美日韩免费| 永久免费看mv网站入口亚洲| 精品久久久久久久久久久久| 国产精品久久久精品| 欧美视频在线免费| 亚洲国产精品va在看黑人| 国产欧美一区二区三区四区| 欧美色视频日本版| 日韩av片电影专区| 在线精品国产欧美| 91成品人片a无限观看| 久久久日本电影| 国产精品69精品一区二区三区| 久久国产精品久久精品| 中文字幕免费精品一区高清| 久久久www成人免费精品张筱雨| 久久手机精品视频| 欧美精品videos另类日本| 97人人爽人人喊人人模波多| 日韩免费电影在线观看| 激情亚洲一区二区三区四区| 欧美在线视频播放| 国产精品美女av| 日韩a**站在线观看| 亚洲成色www8888| 国产偷亚洲偷欧美偷精品| 日韩中文字在线| 亚洲激情视频网| 欧美国产日产韩国视频| 国产日本欧美一区| 久久久久久国产精品| 日韩一区二区在线视频| 成人在线视频网| 亚洲精品中文字幕有码专区| 久久久久久久一区二区三区| 日韩欧美在线字幕| 欧美日韩美女视频| 亚洲美女在线观看| 日韩小视频网址| 欧美久久精品一级黑人c片| 国产亚洲人成网站在线观看| 性色av一区二区三区红粉影视| 国产成人亚洲综合| 成人激情在线观看| 亚洲综合自拍一区| 成人在线观看视频网站| 欧美资源在线观看| 国产一级揄自揄精品视频| 97久久伊人激情网| 国产精自产拍久久久久久蜜| 福利一区视频在线观看| 欧美激情xxxxx| 久久精品99国产精品酒店日本| 国产精品久久视频| 亚洲日韩中文字幕在线播放| 91tv亚洲精品香蕉国产一区7ujn| 精品国产电影一区| 国产精品香蕉在线观看| 国产日韩精品电影| 色yeye香蕉凹凸一区二区av| 亚洲视频在线播放| 懂色aⅴ精品一区二区三区蜜月| 国产精品91一区| 久久男人av资源网站| 成人网在线观看| 精品亚洲aⅴ在线观看| 国产一区二区三区在线视频| 伊人久久久久久久久久久久久| 日韩在线观看免费高清| 亚洲午夜av久久乱码| 国产精品偷伦视频免费观看国产| 亚洲视频一区二区| 国产精品中文在线| 亚洲精品一区二区三区不| 欧美美女18p| 精品毛片三在线观看| 97国产精品免费视频| 91久久综合亚洲鲁鲁五月天| 亚洲欧美变态国产另类| 亚洲欧美一区二区激情| 久久久在线视频| 精品偷拍各种wc美女嘘嘘| 日韩欧美亚洲范冰冰与中字| 成人性教育视频在线观看| 在线精品视频视频中文字幕|