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

CentOS8安装NVIDIA显卡驱动、CUDA和Anaconda

CentOS8安装NVIDIA显卡驱动和CUDA 参考:CentOS nvidia+cuda+cudnn 安装 安装英伟达显卡驱动 1、检查是否安装了NVIDIA的GPU(硬件层面): lspci | grep -i nvidia 2、安装GCC、kernal组件、dkms等 sudo yum install gcc sudo yum install gcc-c++ sudo yum -y install kernel-devel sudo yum -y install kernel-headers s

智慧的旋风的博客 1万+

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

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

小花糟偷袭的博客 5370

三轴云台稳定控制算法优化实战:从PID到模糊自适应

本文深入探讨了三轴云台稳定控制算法的优化实践,从经典PID控制到模糊自适应算法的进阶应用。通过实战案例和代码示例,详细解析了PID调参技巧、模糊控制实现及多传感器数据融合方法,帮助工程师在复杂环境下提升云台抗干扰能力和响应速度,特别适用于无人机航拍等场景。

green的博客 910

光电转换器件PMT,APD总结

PMT和APD都属于单点探测器,只能探测光子信息,可以通过扫描方式测光谱。 1. PMT PMT:光电倍增管,是光子技术器件中的一个重要产品,它是一种具有极高灵敏度和超快时间响应的光探测器件。 原理:光电倍增管是一种真空器件。它由光电发射阴极(光阴极)和聚焦电极、电子倍增极及电子收集极(阳极)等组成。当光照射到光阴极时,光阴极向真空中激发出光电子。这些光电子按聚焦极电场进入倍增系统,并通过进一步的二次发射得到的倍增放大。然后把放大后的电子用阳极收集作为信号输出。 优点:因为采用了二次发射倍增系统,.

Ammon_Zhang的博客 1万+

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

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

梦染 * 星尘 的博客 1098

c# U盘禁用---守护进程(插入,拔出,卸载等操作)

一、简介 传统的对U盘禁用,我们多采用修改注册表的方式,详情参考:https://blog.youkuaiyun.com/qq_25372599/article/details/79815407;本文将介绍一种其他的方式–后台守护程序。其原理非常简单:当守护程序检测到U盘的插入信号,我们自动卸载U盘,致使系统无法识别U盘,达到禁用U盘的效果。 二、程序设计 2.1 变量定义 strin...

星星之火燃亮码空 2846

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

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

weixin_34238642的博客 296

【Python学习日记:PySide6】【持续更新】

说明:PySide6 是 Qt for Python 的一部分,是一个 Python 绑定库,可以用来创建跨平台的 GUI 应用程序。它将 Qt 框架的丰富功能带到了 Python 环境中,允许开发者使用 Python 编写 GUI 应用程序。

XLQ的博客 8044

PD3.0详解 电源规则,全解!!!全解!!!

电源规则 大师匈今天谈一下PD3.0的电源规则,PD3.0标准标定的规则。 USB协议声称,为了世界和平世界环境,让大家用上统一标准的充电器,不用再为每一个用电设备都配一个专门的充电器,这些充电器各种各样的都有,所以有时候大师匈也很烦!!!那么为了维护世界和平,USB协议呢就制订了这个PD快充协议,还有它的规则,只要全世界都用PD,就解决了这个大问题。 在这里先了解一个关键字,PDP: Power Delivery Power PD电源的功率。 每个PD充电产品的功率要以0.5W的精度上报,比如大师匈做的P

大师匈的博客 1万+

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

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

林恒的博客 1915

MIKE水动力笔记13_数字化海图2之克里金插值

在进行MIKE水动力建模之初,需要准备好水深数据,本专题系列博文主要讲解如何将扫描版JPG格式海图数据在ArcGIS中进行数字化并制作成xyz水深地形数据,用的克里金插值方法,仅供参考。

晏长街的博客 2881

微信公众号网页获取用户授权取得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

出现 RuntimeError: adaptive_avg_pool2d_backward_cuda does not have a deterministic implementation的解决方法

大致就是在执行主函数的训练函数中,在反向传播这一块出现了问题。解决方法就是添加如下代码块。找到提示bug的行数。

码农研究僧的博客 5532

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

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

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

weixin_34416649的博客 2635

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

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

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

qq_40178044的博客 1128

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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、付费专栏及课程。

余额充值