最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue移動(dòng)端微信授權(quán)登錄插件封裝的實(shí)例

 更新時(shí)間:2018年08月28日 09:40:16   作者:小小令  
今天小編就為大家分享一篇vue移動(dòng)端微信授權(quán)登錄插件封裝的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

1、新建wechatAuth.js文件

const queryString = require('query-string')
//應(yīng)用授權(quán)作用域,snsapi_base (不彈出授權(quán)頁(yè)面,直接跳轉(zhuǎn),只能獲取用戶openid),snsapi_userinfo (彈出授權(quán)頁(yè)面,可通過(guò)openid拿到昵稱、性別、所在地。并且,即使在未關(guān)注的情況下,只要用戶授權(quán),也能獲取其信息)
const SCOPES = ['snsapi_base', 'snsapi_userinfo']


class VueWechatAuthPlugin {

 install(Vue, options) {
  let wechatAuth = this
  this.setAppId(options.appid)
  Vue.mixin({
   created: function () {
    this.$wechatAuth = wechatAuth
   }
  })

 }

 constructor() {
  this.appid = null
  this.redirect_uri = null
  this.scope = SCOPES[1]
  this._code = null
  this._redirect_uri = null
 }

 static makeState() {
  return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15)
 }

 setAppId(appid) {
  this.appid = appid
 }

 set redirect_uri(redirect_uri) {
  this._redirect_uri = encodeURIComponent(redirect_uri)
 }

 get redirect_uri() {
  return this._redirect_uri
 }

 get state() {
  return localStorage.getItem("wechat_auth:state")
 }

 set state(state) {
  localStorage.setItem("wechat_auth:state", state)
 }

 get authUrl() {
  if (this.appid === null) {
   throw "appid must not be null"
  }
  if (this.redirect_uri === null) {
   throw "redirect uri must not be null"
  }
  this.state = VueWechatAuthPlugin.makeState()
  return `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`
 }

 returnFromWechat(redirect_uri) {
  let parsedUrl = queryString.parse(redirect_uri.split('?')[1])
  if (process.env.NODE_ENV === 'development') {
   // console.log('parsedUrl: ', parsedUrl)
   this.state = null
   this._code = parsedUrl.code
  } else {
   if (this.state === null) {
    throw "You did't set state"
   }
   if (parsedUrl.state === this.state) {
    this.state = null
    this._code = parsedUrl.code
   } else {
    this.state = null
    throw `Wrong state: ${parsedUrl.state}`
   }
  }
 }

 get code() {
  if (this._code === null) {
   throw "Not get the code from wechat server!"
  }
  // console.log(this)
  // console.log('this._code: ' + this._code)
  let code = this._code
  this._code = null
  // console.log('code: ' + code)
  return code
 }
}

const vueWechatAuthPlugin = new VueWechatAuthPlugin()

export default vueWechatAuthPlugin

2、main.js中導(dǎo)入

import wechatAuth from './plugins/wechatAuth'//微信登錄插件
const queryString = require('query-string');

Vue.use(wechatAuth, {appid: XXXXXXXXX});

3、路由鉤子中可以進(jìn)行相關(guān)操作

router.beforeEach((to, from, next) => {
 if (store.state.loginStatus == 0) {
  //微信未授權(quán)登錄跳轉(zhuǎn)到授權(quán)登錄頁(yè)面
  let url = window.location.href;
  //解決重復(fù)登錄url添加重復(fù)的code與state問(wèn)題
  let parseUrl = queryString.parse(url.split('?')[1]);
  let loginUrl;
  if (parseUrl.code && parseUrl.state) {
   delete parseUrl.code;
   delete parseUrl.state;
   loginUrl = `${url.split('?')[0]}?${queryString.stringify(parseUrl)}`;
  } else {
   loginUrl = url;
  }
  wechatAuth.redirect_uri = loginUrl;
  store.dispatch('setLoginStatus', 1);
  window.location.href = wechatAuth.authUrl
 } else if (store.state.loginStatus == 1) {
  try {
   wechatAuth.returnFromWechat(to.fullPath);
  } catch (err) {
   store.dispatch('setLoginStatus', 0)
   next()
  }
  store.dispatch('loginWechatAuth', wechatAuth.code).then((res) => {
   if (res.status == 1) {
    store.dispatch('setLoginStatus', 2)
   } else {
    store.dispatch('setLoginStatus', 0)
   }
   next()
  }).catch((err) => {
   next()
  })
 }else {
  next()
 }
});

以上這篇vue移動(dòng)端微信授權(quán)登錄插件封裝的實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue中的$set的使用實(shí)例代碼

    Vue中的$set的使用實(shí)例代碼

    這篇文章主要介紹了Vue中的$set的使用,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-10-10
  • Vue中rem與postcss-pxtorem的應(yīng)用詳解

    Vue中rem與postcss-pxtorem的應(yīng)用詳解

    這篇文章主要介紹了Vue中rem與postcss-pxtorem的應(yīng)用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • vue實(shí)現(xiàn)圖書管理demo詳解

    vue實(shí)現(xiàn)圖書管理demo詳解

    這篇文章主要介紹了vue實(shí)現(xiàn)圖書管理,分享了圖書管理demo用的知識(shí)點(diǎn),以及遇到問(wèn)題的總結(jié),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • setTimeout在vue中的正確使用方式

    setTimeout在vue中的正確使用方式

    這篇文章主要介紹了setTimeout在vue中的正確使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 一文詳解Vue如何整合Echarts實(shí)現(xiàn)可視化界面

    一文詳解Vue如何整合Echarts實(shí)現(xiàn)可視化界面

    ECharts,縮寫來(lái)自Enterprise Charts,商業(yè)級(jí)數(shù)據(jù)圖表,一個(gè)純Javascript的圖表庫(kù),可以流暢的運(yùn)行在PC和移動(dòng)設(shè)備上。本文將在Vue中整合Echarts實(shí)現(xiàn)可視化界面,感興趣的可以了解一下
    2022-04-04
  • 使用Vue.js和MJML創(chuàng)建響應(yīng)式電子郵件

    使用Vue.js和MJML創(chuàng)建響應(yīng)式電子郵件

    這篇文章主要介紹了使用Vue.js和MJML創(chuàng)建響應(yīng)式電子郵件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 基于Vue3實(shí)現(xiàn)日歷組件的示例代碼

    基于Vue3實(shí)現(xiàn)日歷組件的示例代碼

    日歷在很多地方都可以使用的到,這篇文章主要介紹了如何利用vue3實(shí)現(xiàn)簡(jiǎn)單的日歷控件,文中通過(guò)示例代碼講解詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Vue項(xiàng)目之安裝引入使用vconsole方式(生產(chǎn)環(huán)境不顯示)

    Vue項(xiàng)目之安裝引入使用vconsole方式(生產(chǎn)環(huán)境不顯示)

    在Vue2開發(fā)中,引入vConsole可以為移動(dòng)端提供類似瀏覽器F12的調(diào)試工具,支持查看日志、網(wǎng)絡(luò)請(qǐng)求等功能,vConsole是一個(gè)輕量、可拓展的前端調(diào)試面板,與框架無(wú)關(guān),適用于多種前端框架,安裝方法包括npm和CDN兩種,可根據(jù)項(xiàng)目環(huán)境配置是否顯示調(diào)試面板
    2024-10-10
  • Vue中使用Canvas實(shí)現(xiàn)繪制二維碼

    Vue中使用Canvas實(shí)現(xiàn)繪制二維碼

    這篇文章主要為大家詳細(xì)介紹了如何在Vue中使用Canvas實(shí)現(xiàn)繪制二維碼,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2007-02-02
  • vue-router中query和params的區(qū)別解析

    vue-router中query和params的區(qū)別解析

    vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,適合用于構(gòu)建單頁(yè)面應(yīng)用,這篇文章主要介紹了vue-router中query和params的區(qū)別 ,需要的朋友可以參考下
    2022-10-10

最新評(píng)論

宿松县| 新河县| 乌鲁木齐市| 鄄城县| 儋州市| 黄龙县| 灵川县| 太谷县| 谢通门县| 元谋县| 丰县| 霞浦县| 阳城县| 塘沽区| 荃湾区| 丹寨县| 将乐县| 平遥县| 高雄市| 永仁县| 寿阳县| 汪清县| 德州市| 新余市| 阿荣旗| 枣庄市| 开平市| 美姑县| 锡林浩特市| 莱阳市| 渝中区| 锡林郭勒盟| 方城县| 红安县| 新宾| 昌都县| 永登县| 冕宁县| 凤台县| 隆安县| 林周县|