首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 25-02-16 06:21
  • 2337
  • 11795
blog.csdn.net

1. 概述

微信授权登录是小程序用户登录的常见方式,利用微信提供的 wx.login 和 wx.getUserProfile 方法,获取用户的基本信息和唯一标识 openid 及 session_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

  1. Page({
  2. data: {
  3. userInfo: null,
  4. hasUserInfo: false,
  5. },
  6. onLoad() {
  7. // 检查是否已有登录信息
  8. const userInfo = wx.getStorageSync('userInfo');
  9. if (userInfo) {
  10. this.setData({ userInfo, hasUserInfo: true });
  11. }
  12. },
  13. // 获取用户信息
  14. async handleLogin() {
  15. try {
  16. // 调用 wx.login 获取临时登录凭证
  17. const { code } = await wx.login();
  18. if (!code) throw new Error('登录失败');
  19. // 调用后端接口,完成登录
  20. const response = await wx.request({
  21. url: 'https://your-backend-api.com/login',
  22. method: 'POST',
  23. data: { code },
  24. });
  25. if (response.statusCode === 200) {
  26. const { userInfo } = response.data;
  27. this.setData({ userInfo, hasUserInfo: true });
  28. wx.setStorageSync('userInfo', userInfo);
  29. } else {
  30. throw new Error('登录失败');
  31. }
  32. } catch (error) {
  33. console.error('登录出错:', error);
  34. wx.showToast({ title: '登录失败,请重试', icon: 'none' });
  35. }
  36. },
  37. });

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

示例:Node.js + Express

  1. const express = require('express');
  2. const axios = require('axios');
  3. const app = express();
  4. app.use(express.json());
  5. // 微信小程序登录接口
  6. app.post('/login', async (req, res) => {
  7. const { code } = req.body;
  8. try {
  9. // 请求微信服务器,获取 openid 和 session_key
  10. const wechatResponse = await axios.get(
  11. `https://api.weixin.qq.com/sns/jscode2session`,
  12. {
  13. params: {
  14. appid: 'your-app-id',
  15. secret: 'your-app-secret',
  16. js_code: code,
  17. grant_type: 'authorization_code',
  18. },
  19. }
  20. );
  21. const { openid, session_key } = wechatResponse.data;
  22. // 根据 openid 查找或创建用户
  23. const user = findOrCreateUser(openid);
  24. res.json({ success: true, userInfo: user });
  25. } catch (error) {
  26. console.error('登录失败:', error);
  27. res.status(500).json({ success: false, message: '登录失败' });
  28. }
  29. });
  30. // 模拟用户查找/创建方法
  31. function findOrCreateUser(openid) {
  32. // 这里可以查询数据库,或者创建新用户
  33. return { openid, nickname: '新用户' };
  34. }
  35. 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 应该存储在服务器端,切勿暴露给客户端。
注:本文转载自blog.csdn.net的吉檀迦俐的文章"https://blog.csdn.net/Miller777_/article/details/145177088"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

119
小程序
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top