返回

用代码体验:微信小程序轻松实现 Token 自动刷新

前端

微信小程序用户登录及令牌管理:全面指南

什么是微信小程序?

微信小程序是轻量级的应用程序,可在微信生态系统内运行。它们无需下载或安装,为用户提供了便捷的移动体验。

登录流程

在开发微信小程序时,您需要使用微信小程序 API 进行登录并获取用户信息。此过程涉及以下步骤:

1. 发起登录请求

首先,您的小程序将向微信服务器发起登录请求,以获取临时代码(code)。

2. 交换令牌

使用代码,您可以通过以下请求向微信服务器交换两个令牌:

  • accessToken: 用于获取用户信息
  • refreshToken: 用于刷新 accessToken

3. 存储令牌

将 accessToken 和 refreshToken 安全地存储在您的本地缓存中。

4. 获取用户信息

使用 accessToken,您可以调用微信 API 获取用户的个人信息,例如昵称、头像和性别。

5. 刷新令牌

accessToken 的有效期为 2 小时。如果它过期,您可以使用 refreshToken 通过以下请求刷新它:

https://api.weixin.qq.com/sns/oauth2/refresh_token

注意事项

  • accessToken 的有效期很短,请务必在过期前刷新它。
  • refreshToken 的有效期为 30 天。
  • 保护 accessToken 和 refreshToken 至关重要,因为它们可以用来劫持用户帐户。

代码示例

以下是发起登录请求、交换令牌和刷新令牌的示例代码:

// 发起登录请求
wx.login({
  success: (res) => {
    const code = res.code;
    // 交换令牌
    wx.request({
      url: 'https://api.weixin.qq.com/sns/jscode2session',
      data: {
        appid: 'your_appid',
        secret: 'your_secret',
        js_code: code,
        grant_type: 'authorization_code',
      },
      success: (res) => {
        // 存储令牌
        wx.setStorageSync('accessToken', res.data.access_token);
        wx.setStorageSync('refreshToken', res.data.refresh_token);
      },
    });
  },
});

// 刷新令牌
wx.request({
  url: 'https://api.weixin.qq.com/sns/oauth2/refresh_token',
  data: {
    appid: 'your_appid',
    grant_type: 'refresh_token',
    refresh_token: wx.getStorageSync('refreshToken'),
  },
  success: (res) => {
    // 存储新的 accessToken
    wx.setStorageSync('accessToken', res.data.access_token);
  },
});

常见问题解答

1. 为什么 accessToken 的有效期这么短?

  • 短有效期有助于确保令牌的安全性并防止滥用。

2. 什么时候应该刷新 accessToken?

  • accessToken 过期前应刷新。建议在有效期剩余约 10 分钟时刷新。

3. refreshToken 的有效期是什么时候?

  • refreshToken 的有效期为 30 天。

4. refreshToken 可以无限期刷新吗?

  • 否,如果 refreshToken 长时间未使用(通常为 30 天),它将失效。

5. 如何防止令牌被盗?

  • 使用安全存储机制,例如加密的本地缓存。
  • 定期审核您的应用程序是否有任何可疑活动。

结论

了解微信小程序的用户登录和令牌管理过程对于为您的用户提供安全且无缝的体验至关重要。通过遵循本指南,您将能够有效地管理令牌,确保您的应用程序在不断变化的移动环境中保持安全和可靠。