基于 Next.js 搞定个人公众号登陆流程

我是一名后端开发,最近借着AI Cursor的普及,发现快速的开发一个网页服务已经不再那么困难。所以秉承着"干中学"的态度,也想要上线一款自己的网站,跑通整个流程。但是具体实施过程中,发现实现网站模块比较简单,但是涉及网站登录业务支付 这部分内容,比较费事儿。接下来,我将具体说说针对网站登录模块流程,讲讲我的一些实现过程。

登录选型

常见的登录方式有邮箱手机号第三方登录 等等,如果想要简单邮箱 是比较好的选择,AI基本能很容易实现;如果想要串联大账号体系,手机号 登录比较好,具有唯一属性,很多厂商也这么做;第三方登录常见的有微信、QQ、抖音、淘宝等登录。

笔者有写公众号的习惯,但是关注太少,想要做引流,所以我才用的是个人微信公众号登录方式。

微信公众号登录分为服务号订阅号的登录,服务号的登录如果想要比较简单,可以直接使用Authing公司的登录服务,笔者最起初也想直接这么做,但是发现只支持服务号,故放弃。

订阅号的登录也可以分为认证订阅号未认证订阅号 ,如果是已认证的订阅号,支持调用官方带参数的二维码 接口,可以直接进行扫码关注登录,流程比较丝滑。对于未认证 的个人订阅号,也就是笔者这种情况,可以参考以下方式,通过服务器配置 方式,对接接口权限->对话服务->接收消息->接收普通消息接口权限->对话服务->发送消息->自动回复实现整个登录流程。

微信登录功能体验地址:wx.hsjishu.com

功能概括

以下是一个基于 Next.js 开发的微信公众号登录验证系统,通过公众号菜单触发生成验证码,用户在网页端输入验证码完成登录认证。

功能特点

  • 使用个人微信公众号作为身份验证
  • 通过向公众号发送内容为验证码的消息,触发生成6位数验证码
  • Redis存储验证码和用户信息
  • JWT认证保持登录状态
  • 响应式UI设计,自适应支持移动端和桌面端

工作原理

  1. 用户在网页端访问登录页面,页面引导用户关注公众号
  2. 用户关注公众号后,需要向公众号发送一条内容为【验证码】的消息
  3. 服务端接收到文本消息事件以后,生成6位数验证码,并通过微信消息回复给用户
  4. 用户在网页端输入收到的验证码
  5. 系统验证码正确后,生成JWT令牌并将用户重定向到Dashboard内容页面,完成整个登录流程

快速开始

使用Docker Compose

  1. 克隆仓库到本地
bash 复制代码
git clone https://github.com/liyaodev/wxlogin.git
cd wxlogin
  1. 创建环境变量文件
bash 复制代码
cp .env.example .env

修改.env文件,填入您的微信公众号配置和JWT密钥

  1. 启动服务
bash 复制代码
docker-compose up -d
  1. 访问服务

服务将在 http://localhost:3000 运行

手动部署

  1. 安装依赖
bash 复制代码
npm install
  1. 配置环境变量
bash 复制代码
cp .env.example .env.local

修改.env.local文件,填入您的微信公众号配置和Redis连接信息

  1. 启动开发服务器
bash 复制代码
npm run dev
  1. 构建生产版本
bash 复制代码
npm run build
npm run start

微信公众号配置

需要在公众号管理后台配置服务器

  • URL: https://您的域名/api/wechat/event
  • Token: 与您在环境变量中设置的WECHAT_TOKEN相同
  • EncodingAESKey: 可以使用微信后台自动生成

安全考虑

  • 验证码有效期设为5分钟,减少暴力破解风险
  • JWT令牌过期时间设为1天,您可以根据需要调整
  • Redis连接应当启用密码保护
  • 微信公众号Token和Secret应妥善保管

项目结构

csharp 复制代码
wxlogin/
├── src/
│   ├── components/
│   │   └── VerificationCodeInput.tsx  # 验证码输入组件
│   ├── lib/
│   │   ├── auth.ts                    # JWT认证相关函数
│   │   ├── redis.ts                   # Redis连接和操作
│   │   └── wechat.ts                  # 微信公众号API封装
│   ├── pages/
│   │   ├── api/
│   │   │   ├── auth/
│   │   │   │   └── verify.ts          # 验证码验证API
│   │   │   └── wechat/
│   │   │       └── event.ts           # 微信事件处理API
│   │   ├── _app.tsx                   # Next.js应用配置
│   │   ├── dashboard.tsx              # 登录后的仪表盘页面
│   │   ├── index.tsx                  # 首页(重定向到登录页)
│   │   └── login.tsx                  # 登录页面
│   └── styles/
│       └── globals.css                # 全局样式(Tailwind CSS)
├── public/images
│   └── qrcode.png                     # 公众号二维码图片
├── .env.example                       # 环境变量示例
├── docker-compose.yml                 # Docker Compose配置
├── Dockerfile                         # Docker构建文件
├── next.config.js                     # Next.js配置
├── package.json                       # 项目依赖
├── tailwind.config.js                 # Tailwind CSS配置
└── tsconfig.json                      # TypeScript配置

技术栈

  • Next.js: React框架,用于构建前后端一体化应用
  • Redis: 存储验证码和用户信息
  • JWT: 用户认证与会话管理
  • Tailwind CSS: UI样式库
  • TypeScript: 类型安全的JavaScript超集
  • Docker: 容器化部署

以上就是本期的全部内容,主要实现了个人微信公众号的验证码登录流程。笔者荒生,一名资深的技术开发,谢谢大家的观看,点赞、评论、加关注你的支持就是笔者的动力,有问题也可以私信笔者留言询问

相关推荐
程序员爱钓鱼32 分钟前
Node.js 编程实战:测试与调试 —— 日志与监控方案
前端·后端·node.js
Mapmost40 分钟前
数字孪生项目效率翻倍!AI技术实测与场景验证实录
前端
济南壹软网络科技有限公司42 分钟前
基于 ThinkPHP 8.1 + Workerman 的全开源商业级游戏陪玩系统技术架构设计
游戏·开源·游戏陪玩·php护航·商业版游戏护航
小酒星小杜44 分钟前
在AI时代,技术人应该每天都要花两小时来构建一个自身的构建系统-Input篇
前端·程序员·架构
Cache技术分享1 小时前
290. Java Stream API - 从文本文件的行创建 Stream
前端·后端
陈_杨1 小时前
前端成功转鸿蒙开发者真实案例,教大家如何开发鸿蒙APP--ArkTS 卡片开发完全指南
前端·harmonyos
小杨同学491 小时前
C 语言实战:枚举类型实现数字转星期(输入 1~7 对应星期几)
前端·后端
陈_杨1 小时前
前端成功转鸿蒙开发者真实案例,教大家如何开发鸿蒙APP--ArkTS 卡片刷新机制
前端·harmonyos
大厂技术总监下海1 小时前
大数据生态的“主动脉”:RocketMQ 如何无缝桥接 Flink、Spark 与业务系统?
大数据·开源·rocketmq
go_caipu1 小时前
Vben Admin管理系统集成qiankun微服务(二)
前端·javascript