vue实现微信网页授权登录

微信公众号网页授权--前端获取code及用户信息(vue)【简单详细版】 嗨喽大家好,前段时间开发微信公众号网页授权,虽然网上已经有很多关于这方面的博客或者教程,但是第一次开发还是遇到挺多坑的,以下分享一下我的遇到的一些问题的见解,希望对你们有帮助。 一、测试号相关配置 首先在你公司申请的测试号上配置好相关信息,将你的域名配置好 URL与Token都是要后台配置好的,直接叫后台给过来就好啦,域名一定要和URL的域名保持一致。 然后,在体验接口权限表里面找到网页帐号--网页授权获取用户基本信息,点击修改: 二、获取code 配置好以上回调域名等后,就可以 阅读详情

附:微信官方文档

前言:在用vue做微信公众号网页项目的授权登录中踩过不少坑,在这里记录一下。首先在选择由后端做登陆还是前端传token登录的方式上产生了分歧。两种方式在不同的公司里都用过,后端做登陆无非是前端跳转到jsp或者php页面,后端把登录做了在跳转回页面,这种方式前端方便了,但是中途需要跳转多次,很影响体验,所以最终选择了前端传token的方法进行登录。

不想看过程的可以直接往下拉查看完整代码

目录

一、授权流程

二、完整代码

一、授权流程

由微信的官方文档得知,授权登陆共分为四步:

其中,第一步由前端来做,第二步前端通过ajax把code传到后端,后端获取access_token,第三步第四步则需要后端完成。

写代码之前需要明确下需求,整理下思路,先想在写是个好习惯。

我们需要做的是:

1、前端在需要获取用户信息的页面调起登录,某些页面不需要,比如首页、某些展示静态页。

2、微信返回,前端截取返回url中的code传给后台,并把后台返回的token存到session和axios的header头中。

3、如果session中已经有token了,调另一个接口,判断token是否已经过期,过期重新登陆。

开始写代码。

因为单页面应用的url带着#,微信授权登陆回调对#支持不友好,所以我们把路由换成history模式,后台配合改一下,不然页面会404。

mode: "history"

在路由守卫的beforeEach中写登录代码

首先登录,1:

window.location.href = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appid + "&redirect_uri=" + redirect_uri + "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect"

白名单判断:

let noLoginArr = ["/"], isCur = false
for (let i of noLoginArr) {
    if (to.path == i) {
        isCur = true
    }
}
if (isCur) { //白名单内不做登录判断,直接next
    next()
} 

登陆之后截取url中的code传给后台,2:

let data = {
    code: code
}
axios.post('/api/auth/code', data).then((res) => {
    if (res.code == 200) {
        sessionStorage.setItem("token", res.data.token)
        axios.defaults.headers.common['token'] = res.data.token
        next()
    } else if (res.code == 401) { //后台判断toke是否失效,失效返回401重新授权登陆
        //去登录
        window.location.href = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appid + "&redirect_uri=" + redirect_uri + "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect"
    }
}).catch(function (error) {
});

如果session中有token,3:

axios.defaults.headers.common['token'] = sessionStorage.getItem("token")
let data = {
    token: token
}
axios.post('/api/auth/checkToken', data).then((res) => { //判断token是否过期接口
    if (res.code == 200) {
        next()
    } else if (res.code == 401) { //后台判断toke是否过期,过期返回401重新授权登陆
        sessionStorage.setItem("token","")
        axios.defaults.headers.common['token'] = ""
        //去登录
        window.location.href = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appid + "&redirect_uri=" + redirect_uri + "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect"
    }
}).catch(function (error) {
});

说一下自己踩得一个坑:登陆之后,在当前页面不动等token过期,刷新页面。此时页面会不停的跳转

解决方案:每次登录时,去除回调url中的code和state,所以大家在页面间传值的时候不要使用code和state关键词。

二、完整代码

以下是完整代码:

const routes =[
 // 你的路由
]
const router = new VueRouter({
    mode: "history",
    routes
})

function delCodeandstate(to) { //函数作用:去除url中的code和state
    let path = ""
    for (let i in to.query) {
        if (i != "code" && i != "state") {
            path = path + "&" + i + "=" + to.query[i]
        }
    }
    path = path == "" ? "" : path.substring(1, path.length)
    path = path == "" ? "" : "/?" + path
    return path;
}

router.beforeEach((to, from, next) => {
    let fullPath = to.fullPath
    if (to.fullPath.includes("code")) { //判断url中是否有code,踩坑1-页面反复跳转
        fullPath = delCodeandstate(to)
    }
    let redirect_uri = encodeURIComponent("http://xxx.com" + fullPath), appid = "你的小程序appid" //redirect_uri,授权登陆后的回调地址,需要进行encodeURIComponent处理
    let code = to.query.code, state = to.query.state
    let noLoginArr = ["/"], isCur = false, token = sessionStorage.getItem("token") //noLoginArr,白名单,不需要授权登陆的页面
    for (let i of noLoginArr) {
        if (to.path == i) {
            isCur = true
        }
    }
    if (isCur) { //白名单内不做登录判断,直接next
        next()
    } else {
        if (code && state && !token) { //登陆之后获取到code,传到后台登录
            let data = {
                code: code
            }
            axios.post('/api/auth/code', data).then((res) => {
                if (res.code == 200) {
                    sessionStorage.setItem("token", res.data.token)
                    axios.defaults.headers.common['token'] = res.data.token
                    next()
                } else if (res.code == 401) { //后台判断toke是否失效,失效返回401重新授权登陆
                    //去登录
                    window.location.href = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appid + "&redirect_uri=" + redirect_uri + "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect"
                }
            }).catch(function (error) {
            });
        } else if (token) { //已登录,有token,判断是否过期
            axios.defaults.headers.common['token'] = sessionStorage.getItem("token")
            let data = {
                token: token
            }
            axios.post('/api/auth/checkToken', data).then((res) => { //判断token是否过期接口
                if (res.code == 200) {
                    next()
                } else if (res.code == 401) { //后台判断toke是否过期,过期返回401重新授权登陆
                    sessionStorage.setItem("token","")
                    axios.defaults.headers.common['token'] = ""
                    //去登录
                    window.location.href = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appid + "&redirect_uri=" + redirect_uri + "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect"
                }
            }).catch(function (error) {
            });
        } else { //未登录,没有token,去登录
            //去登录
            window.location.href = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appid + "&redirect_uri=" + redirect_uri + "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect"
        }
    }
})
export default router

 

vue3接入微信扫码授权登录流程 当用户打开上面的二维码并扫码授权确认时,第三方应用跳转中间路由拿到微信返回的code参数,这时通过router.beforeEach函数中进行拦截判断,获取url中的code,根据code调用接口进行。注意: 这里涉及到redirect_uri参数,用户扫码完成后微信拉取重定向地址都是根据redirect_uri参数拉取的,所以前端要配置好redirect_uri的最终指向。本篇主要介绍两点,相关文档请查阅微信开平台。 阅读详情

相关推荐

vue项目:基于网页授权的微信扫码登录Demo

开源一个 vue 项目实现:利用网页授权进行 PC 端扫码登录 之前研究了下微信端扫码登录的实现微信网页扫码登录和公众号网页授权登录的比较 因为微信开放平台的扫码登录需要认证(交钱),就稍微麻烦一点使用网页授权的方式来做 PC 端扫码登录。 实现思路涉及技术web 端服务端公众号配置在线 Demo参考资料# 实现思路 简要介绍 PC 端点击扫码登录时会生成一个 uuid 并弹出一个二维码,二维码地...

薛定喵君的博客 3517

Vue 网页端(pc)微信授权登录的流程与方法

1.在当前页面利用微信提供的api接口,生成二维码图片,用户扫码完成过后,跳转到微信授权登录中间页,判断微信返还的状态,是已注册还是未注册。以上的前提是配置好微信开放平台的回传的url地址。前端拿到后端返还的参数,配置在wxlogin的组件内,即可成功得到二维码图片。redirect_uri这里的url指的是扫码成功后所跳转回的url。我们可以在跳转完成回去的页面的生命周期内,进行对微信登录状态的判断等。像微信的api请求后获取到返还的url,再给前端,前端直接跳转到。重要的是配置回传跳转的路径。

陈先生的博客 3722

Vue 3问题解答:Vue.js 中实现微信扫码授权登录

在前端开发中,实现微信扫码授权登录是一个常见的需求。本文将向您展示如何在 Vue.js 3 中实现微信扫码授权登录。

ScriptWELL的博客 823

使用Vue微信授权登录:一个简单高效的解决方案

使用Vue微信授权登录:一个简单高效的解决方案 在开发过程中,我们常常需要集成微信登录功能以提供更便捷的用户体验。 是一个专门针对Vue.js框架设计的微信授权登录组件,它简化了微信OAuth2.0授权流程,帮助开发者快速实现微信一键登录。 项目简介 Vue-Wechat-Auth 是由开发者Jindasong创建的一个小型但功能强大的插件。它遵循Vue的设计哲学,轻量且易于集成,提供了完整的微信...

gitblog_00024的博客 1029

Vue2 - 详细实现公众号 H5 网页授权登录流程及示例代码,申请测试公众号全流程及本地调试无需部署上线服务器就能直接调起微信登陆授权页面,第三方web公众号网站做微信登录授权拿到用户手机号昵称头像

vue2,nuxt2,微信公众号,h5,移动端,vue2微信网页登陆,微信登录,vue微信授权第三方网站登录,微信公众号第三方网页授权登录,流程及逻辑详细教程,OAuth2.0,vue公众号网页授权,vue微信网页授权通过code换取网页授权,redirect_url参数错误,报错,无法调起,如何申请测试公众号,微信公众平台测试号的申请与使用,微信公众号网站使用vue获取用户openid等信息,利用测试号实现本地调试微信登录授权,本地无法调试怎么办,测试公众号,在开发环境下怎么测试,用项目本地ip地址,微信

🏆 前端领域优质创作者 3692

Vue3 - 详细实现公众号 H5 网页授权登录流程及示例代码,申请测试公众号全流程及本地调试无需部署上线服务器就能直接调起微信登陆授权页面,第三方web公众号网站做微信登录授权拿到用户手机号昵称头像

vue3,微信公众号,移动端h5,vue3微信网页登陆,vue3微信授权登录,微信授权第三方网站登录,微信公众号第三方网页授权登录,利用测试号实现本地调试微信登录授权,本地无法调试怎么办,在开发环境下怎么测试,用项目本地ip地址,流程及逻辑详细教程,vue3H5微信授权登陆获取用户昵称手机号数据,vue3公众号网页授权,redirect_url参数错误,报错,无法调起,如何申请测试公众号,微信公众平台测试号的申请与使用,微信公众平台接口测试帐号申请,Vue3如何在本地调试实现微信公众号H5授权登录,微信公

🏆 前端领域优质创作者 1万+

【亲测免费】 Vue 3.0 + TypeScript 实现的微信网页授权登录示例

Vue 3.0 + TypeScript 实现的微信网页授权登录示例 1. 项目基础介绍 本项目是基于 Vue 3.0 和 TypeScript 开发的一个微信网页授权登录示例。项目利用 Vue 3.0 的最新特性,结合 TypeScript 的强类型特性,为开发者提供了一个微信授权登录功能的实现方案。项目遵循 MIT 开源协议,可供个人或企业自由使用和修改。 主要编程语言:Vue 3.0、Typ...

gitblog_00805的博客 454

国产平替NeuroSky?实测金牛座TGAM脑电模块,从Arduino到Python的完整数据采集指南

本文详细介绍了国产金牛座TGAM脑电模块的完整使用流程,包括硬件连接、数据采集和Python分析。通过Arduino和Python的实战案例,展示了如何从脑电波传感器获取并解析专注度、放松度等数据,适用于专注力训练和脑机接口开发。

weixin_30735745的博客 576

VUE 实现公众号网页微信授权登录

这里不做过多的解释,具体了解见官网文档。 网页授权官方文档 需要准备工作: 1、微信开发者工具 2、公众号添加开发者权限以及本地IP白名单 3、公众号唯一标识:appID 4、公众号配置网页授权域名 注:重定向地址的域名一定要和公众号所配置的域名为同一域名!!! 不然会报 redirect_uri 参数错误!!! 放代码: <template> <button type="primary" @click="handLogin()">微信授权登录</button> &

小花糟偷袭的博客 5370

基于ESP32与PCM5102的WiFi无损音频传输系统设计与实现

本文详细介绍基于ESP32与PCM5102的WiFi无损音频传输系统设计与实现。通过I2S接口直接传输PCM数据,避免SRC重采样,实现真正的HIFI级音质。涵盖硬件连接、软件架构、网络传输优化及实际音质对比,为音频爱好者提供高性价比的无损无线音频解决方案。

rnn9storyteller的博客 948

手把手教你用GEM-2多频电磁仪找地下管道(附真实数据图)

本文详细解析了使用GEM-2多频电磁仪精准定位地下管线的全流程,包括设备调试、频率选择、现场扫描技巧及数据解读。通过真实案例展示了如何应对复杂干扰环境,提升管线检测效率与准确性,特别适合市政工程和地下管线普查。

weixin_42565652的博客 397

WxJava+Vue3 实现微信网页授权登录功能

WxJava+SpringBoot 实现公众号网页授权。

梦染 * 星尘 的博客 1098

【超详细】MIT 液态神经网络(LNNs)——深度学习新动向

输入可以是任何形式的时间序列数据,其中表示时间。例如传感器读数、金融市场数据、语音信号等。

allein_STR的博客 2611

Laravel + Vue.js 的 SPA 项目中进行微信网页授权的一种姿势

相信 Laravel 和 Vue.js 很多人都已经相当熟悉了,在较近版本的 Laravel 中,已经默认支持 Vue 组件化开发,这也顺应了眼下基于 API 前后分离以及开发单页面应用(SPA)的均势。 项目基本情况 Laravel 5.4 overtrue/laravel-wechat 包 (内部依赖 overtrue/wechat...

weixin_34238642的博客 296

从数字后端角度谈谈occ电路(二)

从图中,我们可以清晰的看出,当scan_en为1时,test mode为1时,经过一系列逻辑单元后,得到clk_sel输出信号为1,同样可推算fast_clk_en = 0,slow_clk_en为1,此时clk_out输出为slow clk,符合我们预期。在该模式下,是使用slow clock进行scan shift,接着我们开始进行推导;从图中,我们根据逻辑运算可以看出,clk_sel输出信号为0,fast clk en为1,此时通过mux选择,clk out即为fast clk;

芯冰乐 358

8.9华为OD机试真题 新系统 - 查找最佳充电策略 (Java/Py/C/C++/Js/Go)

8.9华为OD机试真题 新系统 - 查找最佳充电策略 (Java/Py/C/C++/Js/Go)

算法大师! 1168

记录--vue3问题:如何实现微信扫码授权登录?

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一、需求 微信扫码授权,如果允许授权,则登录成功,跳转到首页。 二、问题 1、微信扫码授权有几种实现方式? 2、说一下这几种实现方式的原理是什么? 3、vue中的微信扫码授权登录,与uniapp和原生小程序的微信授权登录,它们之间有共同点吗? TWO 解决问题,答案速览 一、网页跳转式 前端只需调用后端微信登录的接口即可。生成...

林恒的博客 1915

UE5实现物体高亮描边效果(含UE相关源码浅析)

UE5实现物体高亮描边效果

专注GIS开发 7334

微信公众号网页获取用户授权取得openid,和使用openid进行协助登录逻辑(Vue样例)

微信官方文档——微信网页开发/网页授权 https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html 官方给的获取openid步骤: 目录 第一步:用户同意授权,获取code 第二步:通过code换取网页授权access_token 第三步:刷新access_token(如果需要) 第四步:拉取用户信息(需scope为 snsapi_userinfo) 前端需..

JIZQAQ学习&踩坑笔记本 9192

【SCADA】KingSCADA将数据插入SQLServer的方法

1、创建数据库及数据表格;2、配置ODBC数据源。3、通过KingSCADA与数据库建立连接,将数据写入数据库对应表格。

做有价值的事,积累有价值的笔记! 4958

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

vue微信网页授权最终解决方案

vue微信网页授权,基于vue-cli3.0+webpack 4+vant ui + sass+ rem适配方案+axios,开发的微信授权方案。项目地址:vue-wechat-auth又又又一次来写微信网页授权,一年前写过的 [vue 微信授权解决方案]。参考了[vue-wechat-login],思路有些不同,本文基于进入所有页面都必须先授权的操作。与之前写的授权不同之处 这次的逻辑全部在ro...

weixin_34416649的博客 2635

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

在 vue-cli 实现微信授权登录

1.第一步,首先要申请微信公众号测试账号 微信公众平台接口测试帐号申请 2.第二步,关注测试号(重要!否则无法实现授权登录) 3.第三步,阅读微信网页授权文档 阅读文档,编辑你的微信授权链接 图中要填的域名要和你编辑的授权链接中 redirect_uri 要一致 4.第四步在router中做登录判断,这里我贴上我的代码 router.beforeEach(function (to, from, next) { // 未登录的情况下尝试进入非登录页 if (to.path !== '/author'

qq_40178044的博客 1128

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

vue3 微信扫码登录及获取个人信息实现的三种方法

vue3 微信扫码登录及获取个人信息实现的三种方法

leaning_java的博客 1万+
上一篇: Windows10家庭版安装虚拟机
下一篇: 疫情影响下一枚前端的求职之路(面试题)--2020.6
阵雨丶
博客等级 码龄9年 126粉丝 52原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值