本文介绍了Vue微信公众号开发踩坑全记录,分享给大家,也给自己留个笔记。

需求
现状及难点
解决方案
授权登录
授权流程如下:
详细说明:
踩坑记录:
以下是一个错误授权方案
这个方案为什么错误呢?其实如果只实现授权登录到话,这个方案是可以的,而且也很清晰,vue客户端单方面在服务器和微信服务器之间进行通信,微信服务器不能直接和服务器通信。这种方案的坑在于当微信授权回调时会携带一个code参数,该参数会污染vue路由导致ios上进行JS-SDK签名时失败(后续会具体描述这个问题)
JS-SDK签名
对于签名,官方是这么说的
所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用(同一个url仅需调用一次,对于变化url的SPA的web app可在每次url变化时进行调用
vue中路由有history和hash两种模式;在history模式下,理想的设计方案是,当进入到需要用到JS-SDK组件时,获取以下当前url(也就是通过 location.href.split(‘#')[0]获得到的地址)传递到服务端进行签名,应该就没问题了,但是IOS获取的url并不是调用微信js的时候所在页面的地址,而是进入到网站第一个页面的地址。
网上查询到一个方案是针对ios设备进入页面时先将当前url记录下来,到授权页面时将记录的url传递给服务端进行签名。该方案经实践是可行的,妈妈再也不用担心我的网址很丑很难看啦。
另外一个方案就是使用hash模式,这种模式下,url永远都只是主域名地址,省去了传递url的烦恼,也没必要处理兼容,所以如果不建议路由中有#的话,该方案应该是首选方案。
这里还有一个深坑,那就是如果授权方案采用了上述中的vue客户端处理回调的方式,那么ios将永远无法签名成功,为什么呢,因为这种方案路由通常是这样子的:
http://domain.com/?code=xxxxxx&stat=#/xxx
这种路由中带了参数的url是没法签名校验成功的!
这种路由中带了参数的url是没法签名校验成功的!
这种路由中带了参数的url是没法签名校验成功的!
重要的事情得说三遍啊
Coding
任何不上代码的吹逼都是耍流氓,这里笔者分享下在vue中具体怎么coding的。
微信授权登录
笔者在项目中使用的vue-router进行路由控制,使用了vuex记录用户登录信息,但是由于vuex中存储的内容在页面刷新后会丢失,所以服务端同时也写了用户登录状态到cookie中,vue中需要通过这两个条件进行登录判断,不多BB,直接看代码吧
// ... other code
router.beforeEach((to, from, next) => {
if ((!VueCookie.get('user') && !store.state.userInfo)) {
// 第一次访问
console.log('授权登录')
// 跳转到微信授权页面,微信授权地址通过服务端获得
axios.post('/api/login').then(res => {
var data = res.data
if (data.code === 100) {
window.location.href = data.data
}
})
} else if (!store.state.userInfo) {
// 刷新页面,获取数据存入vuex
axios.get('/api/currentuser').then(res => {
if (res.data.code === 100) {
store.dispatch('setUserInfo', res.data.data)
next()
}
})
console.log('cookie生效期内登录')
next()
} else {
// 已经登录
console.log('已登录')
next()
}
})
//... other code
history模式下的JS-SDK签名
在入口文件中将当前url存入vuex
// ... other code
router.beforeEach((to, from, next) => {
document.title = to.meta.title
// 处理jssdk签名,兼容history模式
if (!store.state.url) {
store.commit('setUrl', document.URL)
}
// ... other code
在需要获取签名的组件中获取并进行配置
// ... other code
created () {
var sef = this
var url = ''
// 判断是否是ios微信浏览器
if (window.__wxjs_is_wkwebview === true) {
url = this.$store.state.url.split('#')[0]
} else {
url = window.location.href.split('#')[0]
}
this.$http.get('/api/jssdk?url=' + url).then(function (res) {
sef.lists = res.data.data
hmTools.wechact(sef.lists, sef) //js-sdk配置
})
}
// ...other code
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Vue微信公众号
# Vue微信公众号开发
# Vue微信公众号网页分享的示例代码
# 使用vue完成微信公众号网页小记(推荐)
# 使用vue编写h5公众号跳转小程序的实现代码
# Vue开发Html5微信公众号的步骤
# vue中使用微信公众号js-sdk踩坑记录
# vue项目使用微信公众号支付总结及遇到的坑
# Vue.js 实现微信公众号菜单编辑器功能(二)
# Vue.js 实现微信公众号菜单编辑器功能(一)
# vue 做移动端微信公众号采坑经验记录
# 巧用Vue.js+Vuex制作专门收藏微信公众号的app
# 如何使用vue开发公众号网页
# 服务端
# 客户端
# 回调
# 带了
# 深坑
# 用户登录
# 模式下
# 跳转到
# 的是
# 都是
# 是一个
# 第一个
# 也没
# 耍流氓
# 两种
# 不多
# 中有
# 这个问题
# 这两个
# 不上
相关文章:
阿里云网站制作公司,阿里云快速搭建网站好用吗?
招商网站制作流程,网站招商广告语?
如何通过云梦建站系统实现SEO快速优化?
建站之星安装失败:服务器环境不兼容?
如何快速生成高效建站系统源代码?
视频网站制作教程,怎么样制作优酷网的小视频?
为什么Go需要go mod文件_Go go mod文件作用说明
如何零基础开发自助建站系统?完整教程解析
新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
jQuery 常见小例汇总
实例解析Array和String方法
javascript基本数据类型及类型检测常用方法小结
建站之星2.7模板快速切换与批量管理功能操作指南
网站制作免费,什么网站能看正片电影?
南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
建站上传速度慢?如何优化加速网站加载效率?
定制建站流程解析:需求评估与SEO优化功能开发指南
专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?
,巨量百应是干嘛的?
如何通过IIS搭建网站并配置访问权限?
网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何续费美橙建站之星域名及服务?
c++ stringstream用法详解_c++字符串与数字转换利器
宝塔Windows建站如何避免显示默认IIS页面?
寿县云建站:智能SEO优化与多行业模板快速上线指南
如何通过wdcp面板快速创建网站?
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
建站之星如何实现网站加密操作?
建站主机选虚拟主机还是云服务器更好?
网站制作网站,深圳做网站哪家比较好?
外汇网站制作流程,如何在工商银行网站上做外汇买卖?
建站之星安装路径如何正确选择及配置?
如何在阿里云通过域名搭建网站?
如何在宝塔面板创建新站点?
Swift中switch语句区间和元组模式匹配
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
建站之星如何开启自定义404页面避免用户流失?
建站之星安装模板失败:服务器环境不兼容?
网站制作公司排行榜,四大门户网站排名?
如何在橙子建站中快速调整背景颜色?
如何通过虚拟机搭建网站?详细步骤解析
内网网站制作软件,内网的网站如何发布到外网?
网站制作价目表怎么做,珍爱网婚介费用多少?
如何做网站制作流程,*游戏网站怎么搭建?
红河网站制作公司,红河事业单位身份证如何上传?
定制建站平台哪家好?企业官网搭建与快速建站方案推荐
*请认真填写需求信息,我们会在24小时内与您取得联系。