当前位置: 首页 > news >正文

PC端实现微信扫码登录

一、准备工作

1. 注册微信开放平台账号

首先,你需要注册一个微信开放平台账号,并创建一个网站应用。微信开放平台地址:https://open.weixin.qq.com/

2. 获取AppID和AppSecret

在创建好网站应用后,你会获得一个AppID和AppSecret,这两个值在后续的开发中非常重要。

二、前端实现

1. 创建Vue.js项目

你可以使用Vue CLI创建一个新的Vue.js项目:

npm install -g @vue/cli
vue create wechat-login
cd wechat-login
npm run serve

2. 生成微信登录二维码

在你的Vue.js项目中创建一个登录页面,使用微信提供的QR码接口生成二维码。以下是一个示例组件:

<template><div><h1>微信扫码登录</h1><img :src="qrCodeUrl" alt="微信二维码"></div>
</template><script>
export default {data() {return {appId: 'YOUR_APP_ID',redirectUri: encodeURIComponent('https://your-redirect-uri.com/callback'),state: 'random_string', // 用于防止跨站请求伪造(CSRF)qrCodeUrl: ''};},created() {this.generateQRCode();},methods: {generateQRCode() {this.qrCodeUrl = `https://open.weixin.qq.com/connect/qrconnect?appid=${this.appId}&redirect_uri=${this.redirectUri}&response_type=code&scope=snsapi_login&state=${this.state}#wechat_redirect`;}}
};
</script>

YOUR_APP_ID 替换为你在微信开放平台上获得的AppID,将 https://your-redirect-uri.com/callback 替换为你的回调地址,并确保它是URL编码的。

3. 处理微信回调

当用户扫描二维码并授权后,微信会重定向到你提供的回调URL,并带上授权码(code)和状态参数(state)。你需要在服务器端处理这个回调,获取用户的access token和用户信息。

三、后端实现

1. 创建Node.js服务器

你可以使用Express框架创建一个简单的Node.js服务器来处理微信的回调请求。首先,安装Express和Axios:

npm install express axios

然后创建一个 server.js 文件:

const express = require('express');
const axios = require('axios');const app = express();
const port = 3000;const appId = 'YOUR_APP_ID';
const appSecret = 'YOUR_APP_SECRET';
const redirectUri = 'https://your-redirect-uri.com/callback';app.get('/callback', async (req, res) => {const { code, state } = req.query;if (state !== 'random_string') {return res.status(400).send('Invalid state');}try {// 获取 access tokenconst tokenResponse = await axios.get(`https://api.weixin.qq.com/sns/oauth2/access_token`, {params: {appid: appId,secret: appSecret,code,grant_type: 'authorization_code'}});const { access_token, openid } = tokenResponse.data;// 获取用户信息const userInfoResponse = await axios.get(`https://api.weixin.qq.com/sns/userinfo`, {params: {access_token,openid}});const userInfo = userInfoResponse.data;res.json(userInfo);} catch (error) {res.status(500).send('Authentication failed');}
});app.listen(port, () => {console.log(`Server is running at http://localhost:${port}`);
});

YOUR_APP_IDYOUR_APP_SECRET 替换为你在微信开放平台上获得的AppID和AppSecret。

2. 启动服务器

在项目根目录下运行以下命令启动服务器:

node server.js

四、前端处理登录结果

在微信扫码登录页面轮询服务器端的登录状态,并处理登录成功后的用户信息。以下是一个简单的示例:

<template><div><h1>微信扫码登录</h1><img :src="qrCodeUrl" alt="微信二维码"></div>
</template><script>
export default {data() {return {appId: 'YOUR_APP_ID',redirectUri: encodeURIComponent('https://your-redirect-uri.com/callback'),state: 'random_string',qrCodeUrl: ''};},created() {this.generateQRCode();this.checkLoginStatus();},methods: {generateQRCode() {this.qrCodeUrl = `https://open.weixin.qq.com/connect/qrconnect?appid=${this.appId}&redirect_uri=${this.redirectUri}&response_type=code&scope=snsapi_login&state=${this.state}#wechat_redirect`;},checkLoginStatus() {// 轮询服务器端的登录状态setInterval(async () => {try {const response = await fetch('/path_to_your_server_endpoint');if (response.ok) {const data = await response.json();// 登录成功,处理用户信息console.log(data);}} catch (error) {console.error('Error checking login status:', error);}}, 5000); // 每5秒检查一次}}
};
</script>

五、安全和防护措施

  1. HTTPS:确保在生产环境中使用HTTPS保护用户数据安全。
  2. CSRF:使用随机的 state 值防止CSRF攻击。
  3. 验证:对回调中的 codestate 参数进行验证,确保安全。

六、测试

确保微信开放平台应用的设置正确,并且回调URL可以访问。然后打开你的Vue.js页面,扫描生成的二维码进行测试。

相关文章:

  • 图数据库榜单网站
  • Doris索引机制全解析,如何用高效索引加速数据分析
  • ESP32开发-作为TCP服务端接收数据
  • Oracle Bigfile 与 Smallfile 表空间对比分析
  • 如何在Windows上实现MacOS中的open命令
  • 第 11 届蓝桥杯 C++ 青少组中 / 高级组省赛 2020 年真题答和案解析
  • 【机器学习】使用VGG16与K-Means对大量图片进行自动分类
  • 海思3559a_怎么开启SHUB_UART1功能
  • kbuild system学习
  • AI Agent(1):概念与定义
  • ​​深度学习在智能制造中的缺陷检测应用​​
  • 通过API网关防御重放攻击:技术方案与实战验证
  • C# 事件与委托
  • DIT(Diffusion In Transformer)学习笔记
  • PID控制中,一阶低通滤波算法
  • c#TCPsever
  • 配置 Odoo 的 PostgreSQL 数据库以允许远程访问的步骤
  • 高级java每日一道面试题-2025年4月30日-基础篇[反射篇]-在反射中,`setAccessible(true)`的作用是什么?
  • LVGL -按键介绍 上
  • Spring AI如何调用本地部署的大模型
  • 孙磊已任中国常驻联合国副代表、特命全权大使
  • 呼伦贝尔市委常委、组织部长闫轶圣调任内蒙古交通集团党委副书记
  • 新华社评论员:汇聚起工人阶级和广大劳动群众的磅礴力量
  • 酒店就“保洁员调包住客港币”致歉,称希望尽早达成解决方案
  • “下山虎”张名扬一回合摘下“狮心”:你们再嘘一个给我听听
  • “世纪火种”嘉年华启动,69家单位加入阅读“朋友圈”