国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 熱點 > 微信 > 正文

詳解Vue微信授權登錄前后端分離較為優雅的解決方案

2024-07-22 01:17:31
字體:
來源:轉載
供稿:網友

微信授權登錄是一個非常常見的場景,利用微信授權登錄,我們可以很容易獲取用戶的一些信息,通過用戶對公眾號的唯一openid從而建立數據庫綁定用戶身份.

微信授權登錄的機制這里不做詳述,微信官方文檔已有詳述,簡述就是通過跳轉微信授權的頁面,用戶點擊確認后,微信會跳到回調頁面,此時回調頁面url上會攜帶code參數,通過code參數,后端可以拿code換取擁護openid,或者用戶信息

在vue項目中,通常是一個SPA應用,即所有的頁面都是同一個html,通常現在開發也是前后端徹底分離的,vue打包后生成的純靜態文件,甚至可以不經過服務器,所以通過后端弄跳轉之類的都不太優雅,本文即介紹此類場景的微信授權登錄

對于一個vue的SPA應用,我們通常可能有很多頁面,在微信公眾號上我們可能配置多個菜單,多個菜單對應vue的路由頁面,但是可能并不是每個頁面都需要用戶授權才能進入,有些頁面用戶不登錄也需要可以預覽,此時我們可以通過vue router來實現前端路由攔截

 router.beforeEach(async (to, from, next) => { if (to.matched.some(recode => recode.meta.noAuth)) {  next() } else {  // store已存在用戶信息直接進入頁面  if (store.state.userInfo.nickname) {   next()   return  }  const code = getUrl(window.location.href).code // 截取url上的code ,可能沒有,則返回''空字符串  let res = await api.post('/imsl/user/user-auth', [code]) // 獲取用戶信息,后端可首先通過cookie,session等判斷,沒有信息則通過code獲取  console.log(res)  // 返回用戶信息  if (res.code === 200 && res.data.is_auth) {   store.commit('setUserInfo', res.data)   next()  } else {   // 此狀態根據業務需求 可能不存在   if (res.code === 201) {    const openid = res.data.openid    console.log(openid)    store.commit('setOpenid', openid)    localStorage.setItem('openid', openid)    next('/enlist-info')   }   // 上面的獲取用戶信息接口,如果cookie,session拿不到用戶信息,且傳遞的code為空,則跳轉到微信授權頁面   if (res.code === 202) {    console.log(window.location.origin)    console.log(to.fullPath)    // 這個redirectUrl用 當前頁路徑或者tof.fullPath(將要進入的路徑)    let redirectUrl = window.location.href    redirectUrl = encodeURIComponent(redirectUrl)    console.log(redirectUrl)    const appid='wxdff0642c2120ea39'    window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${redirectUrl}&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect`   }  } }})

上述代碼基本闡述了一個授權的過程,首先,我們在配置vue路由的時候,設置此路由是否需要登錄即給router的meta加一個noAuth:true的屬性,這個是處理不需要登錄的頁面,通過router.beforeEach進行判斷,如果是不需要登錄的頁面:noAuth,則直接next()讓其進入相應頁面.對于需要登錄的頁面,則讓后端配合,此時,后端寫一個獲取用戶信息的接口,前端則直接調用獲取用戶信息的接口,當然,不需要每個頁面都調用,獲取一次之后可以將用戶信息存入vuex中,所以通過判斷vuex里面有沒有用戶信息,如果已存在用戶信息,則進入頁面.沒有用戶信息那就調用后端獲取用戶信息的接口,說到這里,終于回到此文主題了,用戶信息是通過微信授權登錄拿到的,此時后端如何拿到用戶信息呢?這里,可以跟后端商議好,用戶綁定身份后,后端則可以通過設置cookie,token之類的保存這個用戶登錄狀態,如果有相關狀態,那么后端則可以直接返回用戶信息. 如果是首次進入,或者cookie,token之類的已失效,那么此時則會調用微信授權登錄了,如上述代碼所述,分為三種情況,

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 崇礼县| 四会市| 嵊州市| 观塘区| 江西省| 定兴县| 曲靖市| 滨海县| 南宁市| 含山县| 安远县| 龙泉市| 临海市| 巴东县| 赞皇县| 彩票| 旬邑县| 南溪县| 佳木斯市| 湾仔区| 汶上县| 罗源县| 科技| 佛学| 法库县| 赣州市| 桦南县| 新安县| 林芝县| 称多县| 四子王旗| 宿迁市| 濉溪县| 华安县| 普兰店市| 宽甸| 北票市| 祥云县| 漳平市| 奉化市| 根河市|