VueCLI微信授权登录

前言

使用Vue开发的SPA项目H5版需要在微信端进行微信授权登录。此次项目Mobile端与PC端是部署在同一服务器的不同目录下的。故移动端和PC端的访问路径是保持一致的,只是子域名有所差异。为了保持路径的一致性,移动端也采用了同PC端一样的路由模式,即history模式。

History模式和Hash模式

vueSPA单页面项目中使用的vue-router路由有hash模式和history模式两种,其默认是hash模式。history模式与hash模式的区别主要有:

hash模式下地址栏的URL路径中会包含一个‘#’号字符,而history模式下地址栏的URL中没有‘#’号。相对来说,history模式比hash模式看起来要美观些。

访问路劲和URL参数位置、拼接先后顺序有所差异。history模式下路径紧接根域名,其后拼接URL地址所需的参数;hash模式下,根域名后紧接的是URL所需的参数,其次是‘#’拼接所访问的文件所在服务器的路径。

两种路由模式的地址跳转方式页有所差异。具体差异请访问 vue-router官方网站 进一步了解,并根据所需选择合适的路由模式。

基本流程

代码思路

因为需要先进行微信授权,所以当用户打开网页时会优先进行用户授权信息校验,为了提升用户体验,避免用户明显感觉到微信授权时的页面跳转,故我们在vue-router的全局权限中加以控制,即在路由生命周期钩子的router.beforeEach阶段进行拦截处理。

无论从打开的URL是哪一个路径下进行访问的,都会优先触发router.beforeEach生命周期钩子函数,在router.beforeEach中判断用户信息,依据是否存在用户信息来判断是否进行微信授权。

注:此次将微信授权的信息存储在了sessionStorage中。

router.js文件代码:

router.beforeEach((to, from, next) => {

// 微信授权页路径(空白页)

if (to.path === "/wx_auth") {

next();

return;

}

// 校验微信授权时存储的微信授权信息

let wxInfo = sessionStorage.getItem("微信授权信息_key");

// 没有用户信息(即未进行微信授权)

if (!wxInfo) {

// 存储默认打开时访问的页面路径

sessionStorage.setItem("wxRedirectUrl", to.path);

// 处理URL地址栏所携带的参数

let search = window.location.search;

if (search.includes("params_key") && search.includes("&")) {

search = search.split("&")[0];

}

// 微信授权获取用户信息指定的路径

let redirect_uri = encodeURIComponent(`微信服务器域名/wx_auth${search}`);

// 随机参数(可不传)

let randomParams = '&state=123';

window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${APPID}&redirect_uri=${redirect_uri}&response_type=code&scope=snsapi_userinfo${randomParams}#wechat_redirect`;

return;

}

});

WeChatAuth.vue微信授权页

created() {

let code = this.getQueryString("code");

if (code) {

this.getToken(code);

} else {

this.$router.replace("/");

}

},

methods: {

// 获取地址栏参数

getQueryString(n) {

let r,

reg = new RegExp("(^|&)" + n + "=([^&]*)(&|$)");

r = window.location.search.substr(1).match(reg);

return r ? decodeURI(r[2]) : null;

},

// 获取token

getToken(code) {

this.$axios

.get("wxauth_api", { params: { code } })

.then(res => {

if (res.data.code == 1) {

let data = res.data.result_data;

// 校验获取到的用户信息是否为空(code只能用一次)

if (!flag) {

// 存储微信授权用户信息

sessionStorage.setItem("wxInfo", JSON.stringify(data));

// 获取初次访问的URL地址

let redirectUrl = sessionStorage.getItem("wxRedirectUrl");

// 重新打开指定页面

this.$router.replace(redirectUrl);

} else {

if (sessionStorage.getItem("wxInfo")) {

let redirectUrl = sessionStorage.getItem("wxRedirectUrl");

this.$router.replace(redirectUrl);

}

}

} else {

console.log("用户授权失败:", res.data.message);

}

})

.catch(err => { });

}

}

注:微信授权时有code,就进行微信授权操作,获取用户信息校验通过之后跳转指定路径。有code值但获取用户校验信息失败可能是由于刷新所造成的,此时也跳转到固定的访问页面。主要是防止回退时,页面停留在微信授权页没有反应,这样不利用提升用户体验,还容易给用户操作和体验效果带来一定的负面的影响,不利用用户体验。

vue获取微信登陆权限_vue微信授权登录相关推荐

  1. vue获取微信登陆权限_vue 微信授权登录解决方案

    背景 vue前后端分离开发微信授权 场景 app将商品分享到微信朋友圈或者分享给微信好友,用户点击页面时进行微信授权登陆,获取用户信息. 问题:没有固定的h5应用首页.授权后重定向url带参数并且很长 ...

  2. vue获取微信登陆权限_Vue获取微信JSSDK授权,以及微信分享

    场景 Vue获取JSSDK授权以便在微信浏览器,或者嵌在小程序里面做些小事情,如朋友/朋友圈分享,微信支付,图片上传下载等 步骤一 配置安全域名: 在微信公众平台对应的公众号设置里面配上相应的JS接口 ...

  3. vue获取微信登陆权限_vue 授权获取微信openId操作

    1.获取url中参数code: 根据code 获取openId:调用后台接口获取openId . function getUrlKey(name){//获取url 参数 return decodeUR ...

  4. 微信vue路由跳转兼容_Vue微信公众号开发踩坑记录

    需求 微信授权登录(基于公众号的登录方案) 接入JS-SDK实现图片上传,分享等功能 现状及难点 采用的Vue框架,前后端分离模式(vue工程仅作为客户端),用户通过域名访问的是客户端,但是微信授权中 ...

  5. 微信公众号开发之授权登录(前端vue篇)

    前序: 由于之前一直是后端直接调用微信授权后,拿到相关信息后再返回给我(就是以前的前后端不分离),所以对微信公众号开发的微信授权登录还一直处于懵逼情况,直到今天有一个项目需要前后端分离,要前端主动去获 ...

  6. 基于Thinkphp5+EasyWeChat+fastadmin微信小程序授权登录获取手机号微信公众号网页---联合授权登录

    战前准备 1.使用 composer 安装 EasyWeChat $ composer require overtrue/wechat:~4.0 -vvv 或者在composer.json文件renq ...

  7. app微信登陆 小程序微信授权登陆

    最近在做一个项目兼容app和小程序 这里写一下这里面微信登陆的流程 这里有授权获取手机号弹窗 需用户手动点击按钮确认授权才行 <!-- 授权获取手机号弹窗 需用户手动点击按钮确认授权才行--&g ...

  8. 微信登陆无法拉起授权界面

    最近几天做微信登陆,我们的登陆页面是H5写的,点击微信登陆按钮,调用安卓的javascript接口,进而调用微信SDK进行登陆,但是我的手机经常拉不起来授权界面,烦恼了好久,原来是自己疏忽大意造成的, ...

  9. 微信小程序 php 手机授权登录

    wxml <!--前台页面,通过判断决定展示登录还是信息--> <view wx:if="{{isHide}}"><view wx:if=" ...

  10. Magento微信登陆模块 / Magento微信联合登陆 / 支持Magento 1.9.X

    2019独角兽企业重金招聘Python工程师标准>>> 网站接入微信联合登陆的好处 通过接入微信登录功能,用户可使用微信帐号快速登录你的网站,降低注册门槛,提高用户留存.并可在用户授 ...

最新文章

  1. Mac OS X 安装教程
  2. camunda流程引擎如此简单(二)
  3. 使用Xtend构建Vaadin UI
  4. laragon环境安装新的php版本后弹出php startup
  5. Keil综合(02)工程窗口各项图标描述
  6. opencv常用函数整理(二)
  7. ofbiz中用 ajax 几点注意
  8. php 字符转ansi,php 字符编码转换类,支持ANSI、Unicode、Unicode big endian、UTF-8、UTF-8+Bom 互相转换...
  9. CAS简介和无锁队列的实现
  10. python数据框追加_将行追加到Pandas数据框将添加0列
  11. 深入浅出 Python Iterators 迭代器
  12. 各大物联网通信技术对比
  13. python接入图灵机器人_Python使用微信接入图灵机器人过程解析
  14. 爬虫,爬取句子迷《龙族》
  15. 如何利用Python开发App?
  16. 哪个相机可以拍gif动图_魅族手机如何拍摄Gif图片 魅族手机拍摄Gif动图的方法图解...
  17. 计算机组成原理课程设计(很全面有保障)
  18. 航天二院计算机硕士待遇怎么样,航天二院706所
  19. Java毕设项目派大星水产商城mp4(java+VUE+Mybatis+Maven+Mysql)
  20. 100行python代码爬取5万条网易新闻评论

热门文章

  1. AECC2019免费下载After Effects CC 2019中文完整破解版免费下载与安装教程...
  2. F200——搭载基于模型设计的国产开源飞控系统无人机
  3. JAVA招聘管理系统计算机毕业设计Mybatis+系统+数据库+调试部署
  4. 社交类APP原型模板分享——Tinder
  5. 高淇python讲义百度文库_Python课堂笔记(高淇400集第一季).pdf
  6. VS2017安装MSDN帮助文档
  7. JDK版本切换——JDK1.1.1
  8. uniapp APP 接入萤石云
  9. Nessus安装与使用
  10. 图片放大后怎么把图片变清晰?