摘要:微信網頁授權,基于適配方案,開發的微信授權方案。項目地址又又又一次來寫微信網頁授權,一年前寫過的微信授權解決方案。
vue微信網頁授權,基于vue-cli3.0+webpack 4+vant ui + sass+ rem適配方案+axios,開發的微信授權方案。項目地址:vue-wechat-auth
又又又一次來寫微信網頁授權,一年前寫過的 [vue 微信授權解決方案]。
參考了[vue-wechat-login],思路有些不同,本文基于進入所有頁面都必須先授權的操作。
與之前寫的授權不同之處這次的邏輯全部在router的beforeEach進行,相較更加簡潔明。之前是在一個中間頁author.vue中,加上微信授權要跳轉很多次
在這里你能找到微信網頁授權前端解決方案,官方文檔
如何使用Natapp(ngrok)進行微信本地開發調試,官方文檔
如何配置微信開發測試賬號
關于測試賬號和本地開發設置由于文章過長這里[微信測試賬號和本地開發調試]記得回來哦~
微信網頁授權都設置好了那就開始微信網頁開發第一步也是最重要的一步,微信網頁授權
關于授權你首先要清楚的是,服務端要用到的是微信openid還是微信unionid,這兩者的區別是,如果你要的是unionid,那么你需要在[微信開放平臺]去綁定測試賬號。測試號的appId和appsecret在微信公眾平臺的測試號里找。微信公眾號后臺->開發者工具->公眾平臺測試帳號->進入
如果你不需要unionid,那這個你就可以省略, 如果服務端是需要unionid的那不綁定的話授權會把報錯的。記得問一下服務端開發人員哦。
開發首先我們看下微信授權的流程圖,關于微信網頁授權
前端需要做的是
第一步:用戶同意授權,獲取code,拼接微信授權地址,redirect_uri就是你的當前地址,關于appid有些人是通過接口獲取的,我這里就直接寫在項目全局變量里了VUE_APP_WECHAT_APPID,用戶授權成功后微信會攜帶code和status跳回來
https://open.weixin.qq.com/connect/oauth2/authorize?appid=${this.appid}&redirect_uri=${this.redirect_uri}&response_type=code&scope=${ this.scope}&state=${this.state}#wechat_redirect
第二步,訪問登錄接口,將code傳給服務端,小哥哥進行一系列的操作,通過code換取網頁授權access_token,拉取用戶信息(需scope為 snsapi_userinfo),返回是否登錄成功,成功后返回用戶信息和登錄令牌 token
在permission.js中路由攔截進行這一系列操作,代碼注釋很詳細了
permission.js
import router from "./router" import store from "./store" import getPageTitle from "@/utils/get-page-title" import wechatAuth from "./plugins/wechatAuth" // 微信登錄插件 const qs = require("qs") router.beforeEach((to, from, next) => { const loginStatus = Number(store.getters.loginStatus) console.log("loginStatus=" + loginStatus) console.log("token=" + store.getters.token) // 頁面標題 document.title = getPageTitle(to.meta.title) if (loginStatus === 0) { // 微信未授權登錄跳轉到授權登錄頁面 const url = window.location.href // 解決重復登錄url添加重復的code與state問題 const parseUrl = qs.parse(url.split("?")[1]) let loginUrl if (parseUrl.code && parseUrl.state) { delete parseUrl.code delete parseUrl.state loginUrl = `${url.split("?")[0]}?${qs.stringify(parseUrl)}` } else { loginUrl = url } // 設置微信授權回調地址 wechatAuth.redirect_uri = loginUrl // 無論拒絕還是授權都設置成1 store.dispatch("user/setLoginStatus", 1) // 跳轉到微信授權頁面 window.location.href = wechatAuth.authUrl } else if (loginStatus === 1) { // 用戶已授權,獲取code try { // 通過回調鏈接設置code status wechatAuth.returnFromWechat(to.fullPath) } catch (err) { // 失敗,設置狀態未登錄,刷新頁面 store.dispatch("user/setLoginStatus", 0) location.reload() } // 同意授權 to.fullPath 攜帶code參數,拒絕授權沒有code參數 const code = wechatAuth.code if (code) { // 拿到code 訪問服務端的登錄接口 store .dispatch("user/loginWechatAuth", code) .then(res => { // 成功設置已登錄狀態 store.dispatch("user/setLoginStatus", 2) next() }) .catch(() => { // 失敗,設置狀態未登錄,刷新頁面 store.dispatch("user/setLoginStatus", 0) location.reload() }) } else { store.dispatch("user/setLoginStatus", 0) location.reload() } } else { // 已登錄直接進入 next() } })
登錄成功后存用戶信息,token。訪問所有的接口的時候都會在header攜帶token,如果token失效了,服務端會返回401,做退出操作,刪除登錄狀態,用戶信息,token,刷新頁面重新進入。
request.js
// 登錄超時,重新登錄 if (res.status === 401) { store.dispatch("user/fedLogOut").then(() => { location.reload() }) }
用戶登錄后將token和用戶信息存入storage中,登錄狀態設置到cookie里,store user中主要是進行用戶信息存貯獲取刪除的操作
store/modules/user.js
import { loginByCode } from "@/api/user" import { saveToken, saveLoginStatus, saveUserInfo, removeToken, removeUserInfo, removeLoginStatus, loadLoginStatus, loadToken, loadUserInfo } from "@/utils/cache" const state = { loginStatus: loadLoginStatus(), // 登錄狀態 token: loadToken(), // token userInfo: loadUserInfo() // 用戶登錄信息 } const mutations = { SET_USERINFO: (state, userInfo) => { state.userInfo = userInfo }, SET_LOGIN_STATUS: (state, loginStatus) => { state.loginStatus = loginStatus }, SET_TOKEN: (state, token) => { state.token = token } } const actions = { // 登錄相關,通過code獲取token和用戶信息 loginWechatAuth({ commit }, code) { const data = { code: code } return new Promise((resolve, reject) => { loginByCode(data) .then(res => { // 存用戶信息,token commit("SET_USERINFO", saveUserInfo(res.data.user)) commit("SET_TOKEN", saveToken(res.data.token)) resolve(res) }) .catch(error => { reject(error) }) }) }, // 設置狀態 setLoginStatus({ commit }, query) { if (query === 0 || query === 1) { // 上線打開注釋,本地調試注釋掉,保持信息最新 removeToken() removeUserInfo() } // 設置不同的登錄狀態 commit("SET_LOGIN_STATUS", saveLoginStatus(query)) }, // 登出 fedLogOut() { // 刪除token,用戶信息,登陸狀態 removeToken() removeUserInfo() removeLoginStatus() } } export default { namespaced: true, state, mutations, actions }
在根目錄下.env開頭的三個文件中設置微信appID
VUE_APP_WECHAT_APPID="12345678"復制代碼
授權再也難不住我了,如果哪里有問題希望大家給我留言糾正,互相學習
關于我您可以掃描添加下方的微信并備注 Soul 加前端交流群,交流學習。
如果對你有幫助送我一顆小星星(づ ̄3 ̄)づ╭?~
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/104716.html
摘要:通過前端怎樣在中進行微信網頁授權登錄背景公司目前上一個新項目,需要使用微信授權登錄,和后端商量了一下,決定使用微信登錄的第一種方法進行授權登錄,就是后臺給一個接口,由前端直接執行,跳轉到一個新頁面,新頁面中生成一個二維碼來進行授權登錄。 通過前端怎樣在vue中進行微信網頁授權登錄 背景: 公司目前上一個新項目,需要使用微信授權登錄,和后端商量了一下,決定使用微信登錄的第一種方法進行授權...
摘要:實現步驟應用創建在云函數的后臺直接創建應用,使用模板。我們僅需要一個云函數就可以實現微信授權的本地調試以及幾個項目幾個公眾號共用一個授權服務,免去獨立域名獨立服務器的煩惱。 背景公司為客戶開發微信公眾號相關服務時,有時未能準備好公眾號,所以需要使用公司的公眾號,但是大家都知道微信網頁授權域名最多只支持兩個,這就...
摘要:分享頁面的實際鏈接當前頁面的鏈接需要編碼公眾號的當前頁面的鏈接,需要編碼其他值均不用改動點擊允許后跳轉的鏈接是。此處的可以用來調取接口獲取微信用戶的相關信息每次用戶授權帶上的將不一樣,只能使用一次,分鐘未被使用自動過期。 vue + 微信獲取用戶信息 本次項目做到一個點贊功能,即分享出去一個頁面給微信好友,微信好友點開并點贊,需要將點贊用戶的微信昵稱,微信頭像以及微信openid,微信...
摘要:分享頁面的實際鏈接當前頁面的鏈接需要編碼公眾號的當前頁面的鏈接,需要編碼其他值均不用改動點擊允許后跳轉的鏈接是。此處的可以用來調取接口獲取微信用戶的相關信息每次用戶授權帶上的將不一樣,只能使用一次,分鐘未被使用自動過期。 vue + 微信獲取用戶信息 本次項目做到一個點贊功能,即分享出去一個頁面給微信好友,微信好友點開并點贊,需要將點贊用戶的微信昵稱,微信頭像以及微信openid,微信...
閱讀 526·2023-04-26 00:33
閱讀 3550·2021-11-24 09:39
閱讀 2955·2021-09-22 15:34
閱讀 2329·2019-08-23 18:07
閱讀 2922·2019-08-23 18:04
閱讀 3711·2019-08-23 16:06
閱讀 2903·2019-08-23 15:27
閱讀 1623·2019-08-23 14:32