ToB企服应用市场:ToB评测及商务社交产业平台

标题: 前端实现 微信扫码登录网站 pc端(二维码嵌套页面) [打印本页]

作者: 梦应逍遥    时间: 2024-10-4 20:25
标题: 前端实现 微信扫码登录网站 pc端(二维码嵌套页面)
前端实现微信扫码登录网站(PC端二维码嵌套页面)

微信扫码登录是一种便捷的用户认证方式,尤其在PC端应用中非常流行。本文将介绍怎样在前端实现微信扫码登录,并在PC端页面中嵌入二维码。
一、前置准备

二、流程概述

三、前端实现步骤

1. 引入须要的库

可以使用纯JavaScript实现二维码的展示,但为了方便,我们可以使用qrcode.js库来生成二维码。
在HTML文件中引入qrcode.js:
  1. <script src="https://cdn.jsdelivr.net/npm/qrcode/build/qrcode.min.js"></script>
复制代码

2. 创建扫码登录按钮和二维码容器
在你的HTML中,创建一个用于触发微信扫码登录的按钮和一个用于展示二维码的容器:
  1. <button id="wechat-login-btn">微信扫码登录</button>
  2. <div id="qrcode-container" style="display:none;">
  3.   <div id="qrcode"></div>
  4. </div>
复制代码
3. 实现扫码登录逻辑

在JavaScript中,添加点击事故监听器来生成二维码并展示:
  1. document.getElementById('wechat-login-btn').addEventListener('click', function() {
  2.     // 请求微信二维码接口,假设你的后端接口为 /api/wechat/qrcode
  3.     fetch('/api/wechat/qrcode')
  4.         .then(response => response.json())
  5.         .then(data => {
  6.             const qrcodeUrl = data.qrcode_url;
  7.             // 从后端获取二维码URL
  8.             // 使用 qrcode.js 生成二维码
  9.             QRCode.toCanvas(document.getElementById('qrcode'), qrcodeUrl, function (error) {
  10.                 if (error) console.error(error);
  11.                 console.log('success!');
  12.             });
  13.             // 显示二维码容器
  14.             document.getElementById('qrcode-container').style.display = 'block';
  15.         })
  16.         .catch(error => console.error('Error:', error));
  17. });
复制代码
四、后端实现二维码接口

在前端展示二维码之前,我们需要后端生成微信登录的二维码URL。这里假设你使用的是Node.js和Express。
  1. const express = require('express');
  2. const axios = require('axios');
  3. const app = express();
  4. const appID = 'your-app-id';
  5. const redirectURI = 'your-redirect-uri'; // 配置的回调URL
  6. const scope = 'snsapi_login';
  7. app.get('/api/wechat/qrcode', (req, res) => {
  8.   const state = 'random-state';
  9.   // 你可以生成一个随机字符串用于防止CSRF攻击
  10.   const qrcodeUrl = `https://open.weixin.qq.com/connect/qrconnect?appid=${appID}&redirect_uri=${encodeURIComponent(redirectURI)}&response_type=code&scope=${scope}&state=${state}#wechat_redirect`;
  11.   res.json({
  12.     qrcode_url: qrcodeUrl
  13.   });
  14. });
  15. app.listen(3000, () => {
  16.   console.log('Server is running on port 3000');
  17. });
复制代码
五、微信回调处理

用户扫码并确认登录后,微信会重定向到你配置的回调URL,并带上授权码(code)和状态(state)。你需要在服务器端处理这个回调,使用授权码请求Access Token,并获取用户信息。
  1. app.get('/api/wechat/callback', async (req, res) => {
  2.   const { code, state } = req.query;
  3.   try {
  4.     const tokenResponse = await axios.get(`https://api.weixin.qq.com/sns/oauth2/access_token`, { params: { appid: appID, secret: 'your-app-secret', code: code, grant_type: 'authorization_code' } });
  5.     const { access_token, openid } = tokenResponse.data;
  6.     const userInfoResponse = await axios.get(`https://api.weixin.qq.com/sns/userinfo`, { params: { access_token: access_token, openid: openid } });
  7.     const userInfo = userInfoResponse.data;
  8.     // 处理用户信息,进行登录或者注册逻辑
  9.     res.json(userInfo);
  10.   } catch (error) {
  11.     console.error('Error:', error);
  12.     res.status(500).send('Authentication failed');
  13.   }
  14. });
复制代码
六、总结

通过以上步骤,我们实现了一个简单的微信扫码登录流程。在现实应用中,你还需要处理更多的细节和安全问题,好比防止CSRF攻击、处理Token的逾期和革新等。
希望本文能帮助你理解并实现微信扫码登录。如果你有任何问题或建议,接待留言讨论!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4