首页/新闻资讯/正文详情

阶段四:模拟微信 OAuth 登录

发布时间:2026/11/15 20:20:11 来源:云帆数科 栏目:资讯中心
阶段四:模拟微信 OAuth 登录
从零构建带AI流式对话的Vue2全栈应用-CSDN博客本文是对这篇文章阶段四的讲解一、为什么不能只用一个“登录成功”按钮真正的第三方登录不是前端自己决定登录成功。需要经过你的前端 微信授权服务器 你的后端基本流程用户点击微信登录 ↓ 跳转微信授权页 ↓ 微信返回临时 code ↓ 前端把 code 交给后端 ↓ 后端验证 code ↓ 后端建立自己系统的登录状态阶段四没有真实微信资质所以使用本地页面模拟微信。二、OAuth 中的几个重要概念1.codecode是一次性临时授权码。它不是最终登录 Token。特点有效时间短 通常只能使用一次 由微信授权后返回 应该交给后端验证2.statestate是前端登录前生成的随机字符串。登录前保存sessionStorage.setItem( wechat_oauth_state, state )回调时比较returnedState expectedState它的作用类似取号票。登录前前端取一张号码票 登录回来检查是不是同一张票如果不一致说明这个回调可能不是当前登录操作产生的。3. Token后端验证code后生成自己的 Token。Token 表示这个浏览器已经登录为哪个用户。阶段四中 Token 放在 Vuex 内存中。三、后端为什么使用Mapconst authorizationCodes new Map() const loginTokens new Map()Map是 JavaScript 的键值集合。可以理解成字典。保存授权码authorizationCodes.set(code, { user: mockWechatUser, expiresAt: ... })读取授权码authorizationCodes.get(code)删除授权码authorizationCodes.delete(code)登录 Token 也是一样Token → 当前用户四、生成随机字符串function createRandomString(byteLength 24) { return crypto .randomBytes(byteLength) .toString(hex) }crypto.randomBytes()用于生成安全随机数据。不能简单地使用Math.random()生成真正的登录 Token因为安全性不够。生成结果类似83a6ce8f019d7d8d...五、获取授权地址接口前端请求GET /api/auth/wechat/authorize-url携带redirectUri state后端返回{ authorizeUrl: http://localhost:3000/mock-wechat/authorize?... }前端执行window.location.href result.authorizeUrl这不是 Vue 路由跳转而是整个浏览器跳转到新的网页地址。六、模拟微信授权页面后端使用res.type(html).send( !DOCTYPE html html ... /html )返回一整个 HTML 页面。浏览器访问http://localhost:3000/mock-wechat/authorize时不显示 JSON而是显示绿色授权页面。点击同意后访问/mock-wechat/approve后端生成code再重定向回前端。七、重定向回 Hash 路由前端使用的是 Hash 路由http://localhost:8081/#/oauth/callback需要把参数放在#后面的路由中http://localhost:8081/#/oauth/callback?codexxxstatexxx前端才能通过this.$route.query.code this.$route.query.state读取。八、一次性授权码后端生成authorizationCodes.set(code, { user: mockWechatUser, expiresAt: Date.now() 5 * 60 * 1000 })五分钟有效。换取登录状态时authorizationCodes.delete(code)先删除再使用。这表示同一个code第二次使用会失败。九、阶段四鉴权中间件function requireAuth(req, res, next) { const authorization req.headers.authorization || if ( !authorization.startsWith( Bearer ) ) { return res.status(401).json({ code: 401, message: 请先登录 }) } const token authorization.slice( Bearer .length ) const currentUser loginTokens.get(token) if (!currentUser) { return res.status(401).json({ code: 401, message: 登录状态无效 }) } req.currentUser currentUser req.currentToken token next() }next()是什么Express 中间件处理完以后需要调用next()才能继续执行真正的接口。流程请求 /api/users ↓ 先执行 requireAuth ↓ Token 无效直接返回 401 Token 有效执行 next() ↓ 继续执行用户接口Bearer Token 格式前端请求头Authorization: Bearer abc123后端先检查startsWith(Bearer )再去掉前面的文字authorization.slice(Bearer .length)最终得到abc123十、阶段四 Vuexstate: { authToken: null, currentUser: null }登录前authToken null currentUser null登录后this.$store.commit( setAuth, result )触发 mutationsetAuth(state, payload) { state.authToken payload.token state.currentUser payload.user }为什么 mutation 不能随便省略推荐的数据修改流程组件 ↓ commit mutation ↓ 修改 state而不是在组件中到处写this.$store.state.authToken token使用 mutation 能让数据变化更清楚也方便调试。十一、Axios 自动添加 Token请求拦截器const token store.state.authToken if (token) { config.headers.Authorization Bearer ${token} }登录后每次发送 Axios 请求都会自动带上Authorization: Bearer ...所以页面调用getUsers()时不需要自己再写 Token。十二、路由守卫router.beforeEach((to, from, next) { const requiresAuth to.matched.some(record { return record.meta.requiresAuth }) const isLoggedIn store.getters.isLoggedIn if ( requiresAuth !isLoggedIn ) { next(/login) return } next() })to将要进入的页面。from当前离开的页面。next决定下一步去哪里。next()正常进入目标页面。next(/login)改为进入登录页。to.matched.some一个页面可能匹配父路由和子路由。to.matched.some(...)检查所有匹配的路由中有没有meta.requiresAuth true有就说明页面需要登录。十三、阶段四为什么刷新后会退出阶段四 Token 只保存在 VuexauthToken: nullVuex 是网页内存。按 F5 后页面重新加载 Vue 应用重新创建 Vuex 重新创建 authToken 恢复 null 路由守卫判断未登录 跳转登录页这不是错误而是阶段四设计上的限制。阶段五会解决这个问题。

相关推荐

《冰河》文字冒险游戏深度解析:东方叙事与对话系统设计
《冰河》文字冒险游戏深度解析:东方叙事与对话系统设计

国产文字冒险游戏《冰河》深度评测:极乐迪斯科风格的东方叙事探索最近在独立游戏圈中,一款名为《冰河》的国产文字冒险游戏引起了广泛关注。作为一款被玩家称为"国产《极乐迪斯科》小代餐"的作品,它究竟有何魅力?本文将… · 2026/11/15 20:20:01

如何5分钟告别网盘限速:开源下载助手LinkSwift终极指南
如何5分钟告别网盘限速:开源下载助手LinkSwift终极指南

如何5分钟告别网盘限速:开源下载助手LinkSwift终极指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼… · 2026/11/15 20:20:05

51单片机从零到实战(4)——数码管显示
51单片机从零到实战(4)——数码管显示

第 4 篇:数码管——学会"显示数字" LED 只能表示开/关。数码管能显示 0-9,让你的项目开始"有信息量"了。1. 数码管原理 每个数码管内部是 7 个 LED 段(a-b-c-d-e-f-g) 1 个小数点(dp)&… · 2026/10/14 21:50:14

电箱上贴电工证通过率揭秘:实操考试心里没底怕挂科?这样准备稳了
电箱上贴电工证通过率揭秘:实操考试心里没底怕挂科?这样准备稳了

电箱上贴电工证通过率揭秘:实操考试心里没底怕挂科?这样准备稳了 实操考试心里没底怕挂科?你不是一个人。很多人考电工证最怕的就是实操部分,觉得手生、操作不熟练、设备陌生,一紧张就容易出错,甚至直接挂科。但其实只要准备到位, 通过率揭秘… · 2026/11/15 20:19:34

报考电工证多长时间多久拿证 电工实操考试怕挂科怎么应对
报考电工证多长时间多久拿证 电工实操考试怕挂科怎么应对

报考电工证多长时间多久拿证 电工实操考试怕挂科怎么应对 实操考试心里没底怕挂科,这是大多数第一次准备考电工证的学员的真实感受。特别是像郑州金水区这样的施工企业,很多负责人都是从一线做起,深知一纸证书在手,职业道路才能走得更稳。但问题来了——… · 2026/11/15 20:19:34

修理汽车的电工证复审延期保姆级教程:证书过期了不知道怎么复审延期?看这篇就够了
修理汽车的电工证复审延期保姆级教程:证书过期了不知道怎么复审延期?看这篇就够了

修理汽车的电工证复审延期保姆级教程:证书过期了不知道怎么复审延期?看这篇就够了 证书过期了不知道怎么复审延期?你是不是正拿着已经过期的修理汽车的电工证,不知道该去哪儿办理复审或者延期?别急,这篇文章就是为你量身定制的 保姆级教程… · 2026/11/15 20:19:34

兴义电工证报考实操考试考什么?怕考不过白交培训费的看过来
兴义电工证报考实操考试考什么?怕考不过白交培训费的看过来

兴义电工证报考实操考试考什么?怕考不过白交培训费的看过来 怕考不过白交培训费?别急,先搞清楚【兴义电工证报考】到底考什么,证书含金量又有多高。如果你是濮阳中小施工企业负责人,正为电工证考试发愁,那你必须看完这篇。… · 2026/11/15 20:19:34

汝州在哪里考电工证网上查询最全攻略来了
汝州在哪里考电工证网上查询最全攻略来了

汝州在哪里考电工证网上查询最全攻略来了 你急需特种作业证才能上岗找工作,但不知道 汝州在哪里考电工证 ,更不清楚怎么 网上查询 自己的证书是否有效?别急,下面这些建议,能帮你避开坑、拿到证、用上证。 一、汝州哪里可以报考电工证?… · 2026/11/15 20:19:34

扬州考证住建厅特种工实操考试心里没底怕挂科?郑州报考避坑指南来了
扬州考证住建厅特种工实操考试心里没底怕挂科?郑州报考避坑指南来了

扬州考证住建厅特种工实操考试心里没底怕挂科?郑州报考避坑指南来了 实操考试心里没底怕挂科,这几乎是每个准备考取特种作业证的学员都会经历的焦虑。尤其是扬州考证住建厅特种工的考试内容既涉及理论,又包含实际操作,一不小心就可能栽在实操环节。别慌,… · 2026/11/15 20:18:33

长春初级电工证怎么考?通过率揭秘全在这里
长春初级电工证怎么考?通过率揭秘全在这里

长春初级电工证怎么考?通过率揭秘全在这里 之前考的证在外省能不能转过来?这几乎是每个想从事电工工作的人都会问的问题。特别是那些在外地打拼多年、手里握着一张“外地电工证”的人,到了长春想继续干这一行,第一反应就是“我的证能用吗?”。今天我们就… · 2026/11/15 0:00:50

国内电工证报考条件与考试时间
国内电工证报考条件与考试时间

低压电工证怎么考?学历不高也能报名,官方报名入口全在这 你是不是经常听说“电工证是入行门槛”,但又担心自己学历不够、经验不足,根本报不了名?别急,今天就带你从零了解【国内电工证】的报考流程、考试内容,还有怎么在 官方报名入口… · 2026/11/15 0:00:50

电工作业时如何断电?电子证书到底能不能全国通用?
电工作业时如何断电?电子证书到底能不能全国通用?

电工作业时如何断电?电子证书到底能不能全国通用? 实操考试心里没底怕挂科,特别是电工作业时如何断电这一操作,不仅关系到你能不能拿到证书,更关系到以后能不能顺利上岗。很多人觉得这不过就是“断个电”,但其实这里面的门道可不少,稍有不慎就可能出错… · 2026/11/15 0:00:50

长春初级电工证怎么考?通过率揭秘全在这里
长春初级电工证怎么考?通过率揭秘全在这里

长春初级电工证怎么考?通过率揭秘全在这里 之前考的证在外省能不能转过来?这几乎是每个想从事电工工作的人都会问的问题。特别是那些在外地打拼多年、手里握着一张“外地电工证”的人,到了长春想继续干这一行,第一反应就是“我的证能用吗?”。今天我们就… · 2026/11/15 0:00:50

国内电工证报考条件与考试时间
国内电工证报考条件与考试时间

低压电工证怎么考?学历不高也能报名,官方报名入口全在这 你是不是经常听说“电工证是入行门槛”,但又担心自己学历不够、经验不足,根本报不了名?别急,今天就带你从零了解【国内电工证】的报考流程、考试内容,还有怎么在 官方报名入口… · 2026/11/15 0:00:50

电工作业时如何断电?电子证书到底能不能全国通用?
电工作业时如何断电?电子证书到底能不能全国通用?

电工作业时如何断电?电子证书到底能不能全国通用? 实操考试心里没底怕挂科,特别是电工作业时如何断电这一操作,不仅关系到你能不能拿到证书,更关系到以后能不能顺利上岗。很多人觉得这不过就是“断个电”,但其实这里面的门道可不少,稍有不慎就可能出错… · 2026/11/15 0:00:50

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/15 1:51:20

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/15 4:02:19

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/15 3:02:05

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码