小程序模板:专业的小程序模板与静态模板分享平台
小程序
教程
搜索
当前位置 : 首页> 小程序教程> 微信小程序原生开发之授权登录

微信小程序原生开发之授权登录

在小程序前端页面中,添加一个按钮用于触发微信登录。







在后端服务器中,实现一个接口用于处理微信登录请求,并调用微信的jscode2session接口获取用户的openid。

// server.js
const express = require('express');
const axios = require('axios');
const app = express();

app.use(express.json());

app.post('/api/wxlogin', async (req, res) => {
  const { code } = req.body;
  const appId = 'YOUR_APPID';
  const appSecret = 'YOUR_APPSECRET';

  try {
    const response = await axios.get('https://api.weixin.qq.com/sns/jscode2session', {
      params: {
        appid: appId,
        secret: appSecret,
        js_code: code,
        grant_type: 'authorization_code'
      }
    });

    const { openid, session_key } = response.data;

    // 这里可以根据openid查询或创建用户,并生成token
    const token = generateToken(openid, session_key);

    res.json({ token });
  } catch (error) {
    res.status(500).json({ error: '登录失败' });
  }
});

function generateToken(openid, session_key) {
  // 这里可以使用JWT或其他方式生成token
  return {
    openid,
    session_key,
    expireTime: Date.now() + 1000 * 60 * 60 * 24 // 24小时有效期
  };
}

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});


在前端,使用uni.setStorageSync将token存储到本地,并在后续请求中携带该token。

// utils/auth.js
export function setToken(token) {
  uni.setStorageSync('ACCESS_TOKEN', JSON.stringify(token));
}

export function getAccessToken() {
  const tokenStr = uni.getStorageSync('ACCESS_TOKEN');
  if (!tokenStr) return null;

  const token = JSON.parse(tokenStr);
  if (token.expireTime && token.expireTime > Date.now()) {
    return token;
  } else {
    uni.removeStorageSync('ACCESS_TOKEN');
    return null;
  }
}


在后端,每次接收到请求时,验证token的合法性。

// server.js
const jwt = require('jsonwebtoken');

app.use((req, res, next) => {
  const token = req.headers['authorization'];
  if (!token) return res.status(401).json({ error: '未授权' });

  jwt.verify(token, 'YOUR_SECRET_KEY', (err, decoded) => {
    if (err) return res.status(401).json({ error: '无效的token' });
    req.user = decoded;
    next();
  });
});

联系客服 意见反馈

签到成功!

已连续签到1天,签到3天将获得积分VIP1天

知道了