H5 微信公众号 授权登录 前后端分离篇(资料准备+前端01)

实现微信公众号授权登录,很简单,但是注意的地方要细心,小伙伴们跟着我的思路一起实现吧!

文章目录

          • 一、帐号申请
            • 1. 正式账号
            • 2. 测试帐号
          • 二、微信文档
            • 2.1. 文档主页
            • 2.2. 授权流程
            • 2.3. 授权回调
          • 三、前端部分
            • 3.1. 登录校验
            • 3.2. code获取
            • 3.3. 请求后端
          • 四、工具下载
            • 4.1. 工具下载
            • 4.2. 启动项目
            • 4.3. 主页访问
            • 4.4. 关注公众号
            • 4.5. 再次请求

一、帐号申请

如果只是为了开发测试,建议使用测试账号,真正需要的时候再进一步需求即可。
为了演示方便,这里使用微信测试账号

1. 正式账号
  • 1.账号申请
    官网链接:https://mp.weixin.qq.com/
    在这里插入图片描述
    授权登录测试需要访问公网,因此,需要自己购买域名服务器、以及通过DNS解析将域名备案、域名和服务器绑定。

具体购买途径:请小伙伴们自己百度吧

2. 测试帐号

微信公众平台接口测试帐号申请
https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
打开微信公众平台登录,用微信扫码登录
在这里插入图片描述
把appID和appsecret复制到txt文本中,等会用

appID:wxd1f5xxx72428a
appsecret:a179826ae2aaff32xxx1551f315c43bc

说明:请使用自己的测试账号

在这里插入图片描述

二、微信文档
2.1. 文档主页

打开微信官网文档选择-公众号
https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html
在这里插入图片描述

2.2. 授权流程

微信网页开发 /网页授权
在这里插入图片描述
实现流程一共5步

  • 1 第一步:用户同意授权,获取code
  • 2 第二步:通过code换取网页授权access_token
  • 3 第三步:刷新access_token(如果需要)
  • 4 第四步:拉取用户信息(需scope为 snsapi_userinfo)
  • 5 附:检验授权凭证(access_token)是否有效
    这里会有二种场景,
    第一种:非前后端分离项目,请参考这篇
    第二种:如果是前后端分离项目,第一步是前端项目页面要做的,其余的2、3、4、5步都在后端项目中执行。

说明:如果是前后端分离项目依次执行1、2、3、4、5步会出现跨域问题
回到测试账号页面,找到网页帐号/网页授权获取用户基本信息/无上限/修改,点击修改,补充域名信息,这里演示采用ip和端口形式,正式环境请使用域名,不要带有端口。

  • 1 第一步:用户同意授权,获取code
    有二种方式,由于我们需要用户的详细信息,因此,这里采用scope为snsapi_userinfo这种
2.3. 授权回调

这里配置的是回调页面的域名,测试账号可以使用ip和端口,正式账号官网只允许使用域名。
在这里插入图片描述

在这里插入图片描述

三、前端部分

这里在用户点击菜单式,跳转主页面,渲染页面时自动引导用户进行登录授权,因此来获取用户信息,用来区分登录用户的身份。

3.1. 登录校验

为了避免多次重复获取用户信息,当前用户登录后,将用户信息保存到本地缓存中,如果从班底缓存中获取不到用户信息,前端就发起请求微信接口获取code,携带code请求后端,由后端完成授权登录剩下的流程,最终将用户信息返回前端,保存到本地缓存中。

mounted() {// debuggerconst user = storage.get("userInfo") || {}if (Tool.isEmpty(user)) {// 如果缓存localStorage中没有userInfo,则需用code去后台获取this.getCode();}},
3.2. code获取
 methods: {getCode() {// 非静默授权,第一次有弹框this.code = '';var callback_url = Wxconst.CALLBACK_URL; // 获取页面urlvar appid = Wxconst.APPID;this.code = this.getUrlCode().code; // 截取codeif (this.code == null || this.code === '') {// 如果没有code,则去请求window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${encodeURIComponent(callback_url)}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`;} else {// 当code不等于空时,调用后端接口获取用户信息this.getUserInfo();// 你自己的业务逻辑}},// 从url中获取code返回getUrlCode() {// 截取url中的code方法var url = location.search;this.winUrl = url;var theRequest = new Object();if (url.indexOf('?') != -1) {var str = url.substr(1);var strs = str.split('&');for (var i = 0; i < strs.length; i++) {theRequest[strs[i].split('=')[0]] = strs[i].split('=')[1];}}return theRequest;}
}
3.3. 请求后端
<script>
import {login} from '@/https/http.js';methods: {getUserInfo() {login(this.code).then((res) => {// console.log('openid' + res.content.openid);// console.log('nickname' + res.content.nickname);// console.log('headimgurl' + res.content.headimgurl);storage.set('userInfo', res.content)});},}
</script>

api接口

export function login(params) {return instance.post('/wxh5/login?code='+params)
}

request.js

// 导入axios
import axios from 'axios';
// 使用自定义配置新建一个axios 实例,对axios 做一些基础配置
const instance = axios.create({// axios中请求配置有baseURL选项,表示请求URL公共部分baseURL: process.env.VUE_APP_SERVER,// baseURL: "http://127.0.0.1:8080/",timeout: 50000,headers: {'X-Custom-Header': 'foobar'}
});// 添加请求拦截器
instance.interceptors.request.use(function (config) {//请求之前执行该函数, 一般在该处设置tokenlet token = localStorage.getItem("token");if (token) {config.headers["token"] = token}// 在发送请求之前做些什么return config;
}, function (error) {// 对请求错误做些什么return Promise.reject(error);
});//响应拦截器
instance.interceptors.response.use(response => {//1.非200响应//2.token过期//3.异地登陆//4.非对象加密的解密console.log('返回结果:', response);return response;
}, error => {console.log('返回错误:', error);const response = error.response;const status = response.status;if (status === 401) {// 判断状态码是401 跳转到首页或登录页console.log("未登录,跳到首页");store.commit("setUser", {});message.error("未登录或登录超时");router.push('/');}return Promise.reject(error);
})export default instance
四、工具下载
4.1. 工具下载

微信开发者工具下载

4.2. 启动项目
npm run dev
or
npm run serve

打开项目
使用微信开发工具扫码登录,选择公众号网页
在这里插入图片描述

4.3. 主页访问

把主页路径复制到微信公众号开发工具中,我的主页路径是http://localhost/

输入http://localhost/,点击回车就会好处下以下图:
在这里插入图片描述
从上面截图可知需要先关注测试账号,用手机号扫描此测试二维码

4.4. 关注公众号

在这里插入图片描述

4.5. 再次请求

咱们继续回到微信公众号开发工具中,我的主页路径是http://localhost/
在这里插入图片描述

说明:第一次会出现是否确认获取你的微信信息,点击允许,微信就会回调redirect_uri,这个就是微信回调的地址

在这里插入图片描述
然后通过getUrlCode()方法从回调的url中获取code
this.code = this.getUrlCode().code; // 截取code

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/516186.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL分页查询方案的性能对比

作者 | 中国农业银行 吴海存责编 | 晋兆雨头图 | CSDN下载自视觉中国导读本文主要介绍了基于ROWNUM、主键列/非空唯一性列、分析函数、OFFSET-FETCH NEXT机制的几种SQL分页查询方案的性能对比。分页查询可分为逻辑分页和物理分页两种。逻辑分页是应用代码级别实现的分页&#x…

阿里云HBase增强版全文索引功能技术解析

新用户9.9元即可使用6个月云数据库HBase&#xff0c;更有低至1元包年的入门规格供广大HBase爱好者学习研究&#xff0c;更多内容请参考链接 阿里云HBase增强版(Lindorm)简介 阿里云数据库HBase增强版&#xff0c;是基于阿里集团内部使用的Lindorm产品研发的、完全兼容HBase的云…

ECMAScript 2015~2020 语法全解析

ECMAScript 2015~2020 语法全解析 &#xff08; ES6 ~ ES11 &#xff09;.快速上手 > es.xiecheng.live

架构师技术文档:Redis+Nginx+Dubbo+Spring+架构师精选视频

最近花了很长的时间去搜罗整理Java核心技术好文&#xff0c;我把每个Java核心技术的优选文章都整理成了一个又一个的文档。今天就把这些东西分享给老铁们&#xff0c;也能为老铁们省去不少麻烦&#xff0c;想学什么技能了&#xff0c;遇到哪方面的问题了 直接打开文档学一学就好…

大分区表高并发性能提升100倍?阿里云 RDS PostgreSQL 12 解读

1. 问题 阿里云某客户发现自己使用读写分离实例&#xff0c;master的cpu特别高&#xff0c;而读写分离中承担读流量的slave节点却相对空闲。用户CPU打满后&#xff0c;访问到主节点的的线上服务受到了较大影响。 1.1 读写分离原理 Redis读写分离实例的原理是&#xff1a;key…

vue vant Area组件使用详解

文章目录1. 下载areaList.js2. 组件注册3. 封装组件4. 使用组件5. 效果图6. 项目源码1. 下载areaList.js 见文章末尾 2. 组件注册 main.js引入并注册(一般与Popup一起使用) 全局注册 //全局导入所有组件 import Vant from vant; import vant/lib/index.css;Vue.use(Vant)局…

微软KV Store Faster如何巧妙实现1.6亿ops

作者&#xff1a;叶提 Faster实现主要分为三部分&#xff1a; Epoch Protection框架&#xff0c;实现并发系统下全局修改&#xff0c;延迟同步到所有线程&#xff0c;简化并发设计。faster线程在大多时候不需要同步&#xff0c;完全独立执行。 支持高并发的无锁hash 索引&…

当飞猪遇上 Serverless | 云原生 Talk

来源 | 阿里巴巴中间件责编 | 晋兆雨头图 | CSDN付费下载于视觉中国前言2019 年 3 月&#xff0c;我们跟随着集团的步伐&#xff0c;将 Serverless FaaS 引入到飞猪&#xff0c;并取得了一定的阶段性成果&#xff1a;这一年&#xff0c;我们参与共建了 Node FaaS 研发平台和稳定…

vue ui 面板创建项目安装 axios 时,浏览器卡死的解决办法

目录 踩坑记1. 问题场景2. 解决办法踩坑记 Vue UI 可视化面板创建新项目,当安装完插件,再安装 axios 依赖时,点击 “ 安装 axios ” 按钮居然毫无响应,此时浏览器卡死、cmd 终端无法关闭,更杯具的是,CPU 占用率 100%,也无法关机或重启电脑 😂 。 1. 问题场景 2. 解决…

EdgeRoutine技术专家教你把JS代码跑到CDN边缘

4月27日CDN云课堂中&#xff0c;阿里云智能技术专家洪晓龙在线分享《阿里云CDN轻量编程环境》&#xff0c;对EdgeRoutine的背景、功能、案例实践介绍并在线进行上手操作演示&#xff0c;希望更多用户能够使用CDN轻量编程环境服务自主编程、快速落地实际线上业务。本文为直播分享…

使用手机企业微信创建自己的企业(公司)

文章目录1. 登录企业微信2. 管理企业3. 全新创建企业4. 补充信息5. 效果图1. 登录企业微信 登录手机企业微信&#xff0c;选择设置 2. 管理企业 3. 全新创建企业 4. 补充信息 补充信息全新创建 所在企业&#xff1a;自己给公司起一个名称 行业类型&#xff1a;随机一个或者…

淘宝万亿级海量交易订单存储在哪?

01淘宝交易订单系统介绍 天猫和淘宝每天发生的实物和虚拟商品的交易达到亿级别。考虑到一次成功交易的整个链路&#xff0c;会涉及到会员信息验证&#xff0c;商品库信息查询&#xff0c;订单创建&#xff0c;库存扣减&#xff0c;优惠扣减&#xff0c;订单支付&#xff0c;物…

vue 单文件组件中,输入template 按 tab 键不能自动补全标签的解决办法

1. 操作步骤 选择: 文件 ⇒ \Rightarrow ⇒ 首选项 ⇒ \Rightarrow

企业微信_新建自建H5小程序应用及主页与菜单设置

文章目录一、新建自建H5小程序应用1. 登录企微管控台2. 登录登录手机企微3. 应用管理4. 创建应用5. 效果图二、主页与菜单设置2.1. 应用主页2.2. 菜单设置2.3. 主页与菜单设置的区别一、新建自建H5小程序应用 1. 登录企微管控台 登录企业微信管理后台 2. 登录登录手机企微 …

阿里云助力1药网开辟疫情防控“第二战场”

这一切都要从那天清晨说起 ”人民日报的带货能力太强大了&#xff0c;昨晚一大波流量进来抢药&#xff0c;我们的服务器快撑不住了&#xff0c;谁能帮忙看看这个线上问题&#xff1f;”在大年初七的清晨&#xff0c;1药网的IT总监在阿里云至尊服务群上紧急地寻求着帮助。此时的…

阿里云资深技术专家易立:我对云原生软件架构的观察与思考

来源 | 阿里巴巴中间件作者 | 易立&#xff0c;阿里云资深技术专家&#xff0c;容器技术负责人头图 | CSDN付费下载于视觉中国前言云原生计算包含三个维度的内容&#xff0c;云原生基础设施&#xff0c;软件架构和交付与运维体系&#xff0c;本文将聚焦于软件架构层面。

【MySQL】 如何在“海啸”下保命

作者&#xff1a;田杰 在数据库的日常使用中&#xff0c;来自应用的高并发场景并不罕见&#xff0c;其标志性的表现为 高新连接创建速率&#xff08;CPS&#xff0c;比如 PHP 短连接&#xff09;、发送大量请求到 DB 数据库层。 如同 海啸&#xff0c;大量的新建连接和请求猛烈…

企业微信H5_自建应用连接H5

文章目录1. 进入自建应用2. 自定义菜单3. 添加主菜单4. 补充信息5. 点击发布6. 登录手机企微7. 点击菜单8. 第2种效果1. 进入自建应用 找到自建的应用 2. 自定义菜单 点击-自定义菜单-已启用 3. 添加主菜单 点击-添加主菜单 4. 补充信息 补充信息-点击保存 主菜单&a…

【MySQL】时区设置引发的卡顿

作者&#xff1a;田杰 查询执行时间长引发应用感知 “卡顿” 的场景在数据库的日常支持和使用中并不少见&#xff0c;但由于时区设置引发的 SQL 执行“卡顿”仍然是一个有趣的现象&#xff0c;之前没有具体关注过。 这次客户的细致与坚持让我们找到了问题的源头。 1. 名词解释…

老码农90%的程序猿都是瞎努力,这份路线教你成为高手!

数据正在变得越来越常见&#xff0c;小到我们每个人的社交网络、消费信息、运动轨迹……&#xff0c;大到企业的销售、运营数据&#xff0c;产品的生产数据&#xff0c;交通网络数据……如何从海量数据中获得别人看不见的知识&#xff0c;如何利用数据来武装营销工作、优化产品…