微信小程序实现微信授权登录的完整流程

article/2025/7/22 0:06:45

1. 概述

微信授权登录是小程序用户登录的常见方式,利用微信提供的 wx.loginwx.getUserProfile 方法,获取用户的基本信息和唯一标识 openidsession_key。结合后端存储及业务逻辑,可以实现用户的身份管理。


2. 流程图

用户授权登录的流程图

微信公众平台配置流程图


3. 实现步骤

3.1 前置条件

  • 已注册并认证的微信小程序。
  • 具备小程序管理员权限,能访问微信公众平台。
  • 了解前后端基础开发,后端需支持 HTTPS。

3.2 微信公众平台配置

1. 登录微信公众平台
  • 打开 微信公众平台。
  • 使用小程序管理员账号登录。
2. 配置开发设置
  1. 点击 开发管理 > 开发设置
  2. 服务器域名 中,配置以下内容:
    • request合法域名:后端接口地址(需支持 HTTPS)。
    • socket合法域名:如果用到 WebSocket,配置对应的域名。
    • upload合法域名:文件上传域名(如果需要)。
    • download合法域名:文件下载域名。
3. 开启登录功能
  1. 用户身份 > 登录方式 中,勾选 微信登录
  2. 确保 登录校验 开启。

3.3 代码实现

1. 前端代码:登录功能实现

pages/login/login.js

Page({data: {userInfo: null,hasUserInfo: false,},onLoad() {// 检查是否已有登录信息const userInfo = wx.getStorageSync('userInfo');if (userInfo) {this.setData({ userInfo, hasUserInfo: true });}},// 获取用户信息async handleLogin() {try {// 调用 wx.login 获取临时登录凭证const { code } = await wx.login();if (!code) throw new Error('登录失败');// 调用后端接口,完成登录const response = await wx.request({url: 'https://your-backend-api.com/login',method: 'POST',data: { code },});if (response.statusCode === 200) {const { userInfo } = response.data;this.setData({ userInfo, hasUserInfo: true });wx.setStorageSync('userInfo', userInfo);} else {throw new Error('登录失败');}} catch (error) {console.error('登录出错:', error);wx.showToast({ title: '登录失败,请重试', icon: 'none' });}},
});

2. 后端代码:处理登录请求

示例:Node.js + Express

const express = require('express');
const axios = require('axios');
const app = express();app.use(express.json());// 微信小程序登录接口
app.post('/login', async (req, res) => {const { code } = req.body;try {// 请求微信服务器,获取 openid 和 session_keyconst wechatResponse = await axios.get(`https://api.weixin.qq.com/sns/jscode2session`,{params: {appid: 'your-app-id',secret: 'your-app-secret',js_code: code,grant_type: 'authorization_code',},});const { openid, session_key } = wechatResponse.data;// 根据 openid 查找或创建用户const user = findOrCreateUser(openid);res.json({ success: true, userInfo: user });} catch (error) {console.error('登录失败:', error);res.status(500).json({ success: false, message: '登录失败' });}
});// 模拟用户查找/创建方法
function findOrCreateUser(openid) {// 这里可以查询数据库,或者创建新用户return { openid, nickname: '新用户' };
}app.listen(3000, () => console.log('Server running on port 3000'));

4. 完整流程详解

1. 前端调用 wx.login

  • 调用后获得临时登录凭证 code,此凭证用于后端获取用户身份信息。

2. 后端调用微信服务器接口

  • 接口地址:https://api.weixin.qq.com/sns/jscode2session
  • 参数:
    • appid:小程序的 AppID。
    • secret:小程序的 AppSecret。
    • js_code:前端传递的 code
    • grant_type:固定为 authorization_code

3. 微信服务器返回数据

  • openid:用户的唯一标识。
  • session_key:用于后续数据解密。

4. 后端处理逻辑

  • 根据 openid 在数据库中查找用户。
  • 如果不存在用户信息,可以自动创建用户。

5. 前端存储用户信息

  • 将后端返回的用户信息存储到本地(wx.setStorageSync),用于后续展示或操作。

5. 注意事项

  1. 确保后端接口使用 HTTPS

    • 微信小程序要求所有请求必须通过 HTTPS。
  2. 保护用户隐私

    • 不要将 session_key 和敏感数据暴露给前端。
    • 在后端做好数据加密和存储。
  3. 登录态的管理

    • 使用 openid 作为用户的唯一标识。
    • 建议实现 Token 机制,用户登录后返回 Token,减少频繁登录请求。
  4. AppSecret 安全性

    • AppSecret 应该存储在服务器端,切勿暴露给客户端。

http://www.hkcw.cn/article/wyPshkRsLk.shtml

相关文章

微信小程序页面制作——婚礼邀请函(含代码)

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

经济学泰斗菲舍尔逝世:培育伯南克、德拉吉的央行界“一代宗师” 全球金融体系的“救火队长”

当地时间6月1日,以色列央行宣布世界著名经济学家、以色列央行前行长及美联储前副主席斯坦利菲舍尔于5月31日逝世,享年81岁。菲舍尔拥有美国和以色列双重国籍,其职业生涯横跨学术界、国际金融机构与中央银行,对全球经济政策产生了深远影响。他曾担任以色列银行行长,并出任美…

高动态范围射频收发器如何解决关键性任务通信的阻塞挑战

摘要 由于频谱有限,商用/专用蜂窝网络的使用越来越多,无线电平台开发面临着更复杂的干扰场景。本文将讨论高动态范围射频收发器 ADRV9002 软件定义无线电(SDR)如何应对关键性任务通信无线电和其他高动态要求无线应用的阻塞挑战。 引言 关键性任务通信…

达科欢迎樊振东加入球队 德甲新星闪耀

#达科欢迎樊振东加入球队# 德甲联赛萨尔布吕肯乒乓球甲级俱乐部 宣布樊振东 加盟球队,效力于该队的达科-约奇克在社交媒体欢迎樊振东加入球队。#樊振东加盟德甲联赛#责任编辑:zx0001

北京今天最高气温达31℃!假期结束防暑降温模式正式开启 北风加大注意防护

据北京市气象局消息,6月2日08时,南郊观象台气温为21.4℃。预计今天白天最高气温将达到31℃左右,外出时请注意遮阳防晒并勤补水。受冷空气影响,今天白天北风自西向东逐渐加大,阵风可达6、7级,请注意防风,防范高空坠物。早晨天气晴间多云,有轻雾,偏北风1、2级,气温在17…

乌为何剑走偏锋突袭俄战略轰炸机 FPV无人机木马立奇功

以色列有“BP机炸弹”,乌克兰有“FPV无人机木马”,这似乎在逼迫普京使用战术核武器。6月1日,据媒体报道,经过18个月的策划,乌克兰实施了代号为“蜘蛛网”的行动,摧毁了41架俄罗斯战略轰炸机。乌克兰安全局发言人表示,此次行动由泽连斯基亲自指挥,乌安全局长马柳克负责具…

2025三掌柜赠书活动第十九期 DeepSeek图书:全年龄段的智慧之选,一本书开启知识之旅

目录 Part.0 前言 Part.1 职场人的AI效率革命:解锁DeepSeek多元应用,精准解决高频痛点! Part.2 企业家的必修课:用AI重构商业模式,打造下一个独角兽! Part.3 学术党的救命稻草:选题到答辩全辅…

Spring Boot + MyBatis 实现的简单用户管理项目的完整目录结构示例

📁 示例项目结构(基于 Maven) user-management/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/example/usermanagement/ │ │ │ ├── controller/ │ │ │ │ └── UserC…

科威特一住宅楼起火致6死 火灾原因待查

科威特费尔瓦尼耶省一栋住宅楼在6月1日凌晨发生严重火灾,导致至少6人死亡,另有5人重伤。据当地消防部门消息,该省拉卡地区一栋建筑内的两套公寓起火,消防人员在凌晨时分已控制住火势。目前火灾的具体原因尚未公布。科威特消防部门发布了公共安全提醒,呼吁各地设施业主严格…

100余所高校校长齐聚西财 共议智能时代高等教育未来

6月1日,西南财经大学百年校庆中外大学校长论坛在蓉城举行。来自厦门大学、中央财经大学、对外经济贸易大学、上海财经大学、电子科技大学、英国剑桥大学等国内外知名大学的100余位校长及专家学者齐聚一堂,共同探讨智能时代高等教育的未来。西南财经大学党委书记赵建军在发言中…

龙船漂移赛竟然还有这么多玩法 非遗遇上极限操作

龙舟不仅能劈波斩浪,还能像赛车一样倒车、漂移、丝滑过“S弯”。最近广东一场龙舟赛在网络上引起了广泛关注,网友纷纷表示这更像是水上版的《速度与激情》。在肇庆叠滘的狭窄河道里,25米长的龙舟以70度急转弯完成“神龙摆尾”,船尾几乎擦岸而过;“湾区伶仃”号上演了“蚂蚁…

萨尔布吕肯达成欧冠三连冠 樊振东加盟助力

乒乓球大满贯得主樊振东已加盟德国乒乓球甲级联赛的萨尔布吕肯俱乐部。该俱乐部曾是德国足坛老牌球队萨尔布吕肯第一足球俱乐部的乒乓球分部,直到前几年才在财务上独立运营。其标志和名称与原足球俱乐部相似,只是加上了德语“乒乓球”一词。樊振东是继柳承敏之后又一位加盟德…

著名相声演员朱文先因病去世 安徽曲艺界痛失泰斗

近日,合肥演艺集团有限公司发布讣告,安徽省著名相声表演艺术家、一级演员、原合肥市曲艺团党支部书记朱文先因病医治无效,于2025年5月31日上午9时12分在合肥逝世,享年87岁。朱文先生于1938年11月,毕生致力于相声艺术的传承与创新。1960年,他拜我国相声泰斗马三立先生的徒…

王晓晨被传婚讯后首露面 晒美照与玫瑰花

6月1日,演员王晓晨在社交媒体上晒出美照和玫瑰花,这是自她与男演员俞灏明的婚讯传出后首次公开露面。5月17日,俞灏明在社交媒体上晒出钻戒照和拉钩照,并写道:“直到你的出现,让我觉得过去承受的一切伤痛都值得!”照片中还附有文字:“晨,四个月了,我真的很想很想为你戴…

余承东和雷军疑似隔空喊话 车圈顶流互撕引热议

在端午节当天举行的粤港澳大湾区车展上,华为常务董事、终端BG董事长余承东再次发表了一系列引人注目的言论。他提到,“互联网讲话都是有记忆的”,并表示希望人们看看他到底是“余大嘴”还是“余小嘴”。他还暗示了一些竞争对手,称他们凭借强大的品牌和流量能力,即使产品并…

赵文卓一家看凤凰传奇演唱会 温馨瞬间引关注

赵文卓全家观看凤凰传奇演唱会的视频近日在网络上引发热议,展现了功夫巨星私下里充满生活气息的一面。赵文卓与妻子张丹露是娱乐圈中的模范夫妻,他们育有三个孩子:大女儿17岁,小女儿7岁,儿子则在瑞士留学。六一儿童节当天,赵文卓在社交平台分享了全家观看演唱会的视频,尽…

小语种导游需求市场激增 免签政策带动旅游热

免签政策的频繁推出促进了“中国游”的热度,上海凭借其独特的历史韵味和现代化气息,吸引了大量外国游客。在浦东国际机场边检入境大厅,越来越多的外国旅客通过免签政策来到上海,走进中国。据上海边检总站数据,今年以来,入境的外籍旅客中近六成是来旅游观光的,其中韩国、…

【AI面试秘籍】| 第25期:RAG的关键痛点及解决方案深度解析

今天我们来聊聊大模型领域一个非常火热的技术——RAG(Retrieval Augmented Generation)。RAG通过引入外部知识库,有效地缓解了大型语言模型(LLM)在处理知识密集型任务时可能出现的幻觉、知识过时等问题。然而&#xff…

26考研——文件管理_文件系统(4)

408答疑 文章目录 三、文件系统1、文件系统架构1.1、文件系统的基本概念1.2、文件系统结构1.3、文件系统布局1.3.1、文件系统在磁盘中的结构1.3.2、文件系统在内存中的结构 1.4、虚拟文件系统 2、磁盘空间管理2.1、空闲表法2.2、空闲链表法2.3、位示图法2.4、成组链接法 五、参…

Trae AI编程创意实践-DIY粽子应用

创意背景 最近恰逢端午假期,我就萌生了一个想法,能否用AI IDE来帮我实现一个DIY粽子应用,能够制作不同口味和形状的粽子。 过去你如果要实现同样的功能成本或许会非常高,比如你需要学习掌握前端相应的技术栈和完成线上部署解决云…