2022最新微信小程序授权登录(前后端分离)
微信小程序授权登录(前后端分离)
最近两年的微信小程序更新中,有两个比较大的变动值得我们关注。首先是获取用户信息接口的更换,从原来的 `wx.getUserInfo` 变为 `wx.getUserProfile`,其次是2021年4月28日24时后发布的小程序新版本,这个新版本对开发者调用 `wx.getUserInfo` 的影响。
变动一:获取用户信息接口
从微信小程序的更新记录中,我们可以看到,从2021年4月28日起,微信小程序开始推出一个新的版本。这个新版本对开发者的影响是:如果你在调用 `wx.getUserInfo` 的时候,不会再弹出一个弹窗,让用户授权你的小程序获取其个人信息。
变动二:2021年4月28日24时后发布的小程序新版本
从微信小程序的更新记录中,我们可以看到,从2021年4月28日起,微信小程序开始推出一个新的版本。这个新版本对开发者的影响是:如果你在调用 `wx.getUserInfo` 的时候,不会再弹出一个弹窗,让用户授权你的小程序获取其个人信息。
前后端分离
在微信小程序中,为了保证数据的安全性和隐私性,我们需要进行前后端分离。也就是说,我们需要将数据存储在服务端,而不是直接存储在客户端(小程序)中。
授权登录流程
下面是微信小程序授权登录的流程:
1. 用户点击登录按钮:用户点击登录按钮后,会触发 `wx.login` 接口。
2. 获取用户信息:服务端通过 `wx.getUserProfile` 接口获取用户的个人信息。
3. 校验用户信息:服务端校验用户的个人信息是否正确。
4. 返回登录结果:如果用户信息正确,服务端会返回一个登录成功的结果。
前后端分离示例
下面是一个简单的前后端分离示例:
```javascript// 小程序端wx.login({
success: function (res) {
if (res.code) {
// 发送请求到服务端,获取用户信息 wx.request({
url: ' method: 'POST',
data: {
code: res.code,
encryptedData: res.encryptedData,
iv: res.iv },
success: function (res) {
if (res.data.success) {
// 登录成功,跳转到下一个页面 wx.redirectTo({
url: '/pages/index'
})
} else {
// 登录失败,提示用户错误信息 wx.showToast({
title: '登录失败',
icon: 'none'
})
}
},
fail: function (res) {
// 请求失败,提示用户错误信息 wx.showToast({
title: '请求失败',
icon: 'none'
})
}
})
} else {
// 获取用户信息失败,提示用户错误信息 wx.showToast({
title: '获取用户信息失败',
icon: 'none'
})
}
},
fail: function (res) {
// 登录失败,提示用户错误信息 wx.showToast({
title: '登录失败',
icon: 'none'
})
}
})
```
```javascript//服务端(Node.js)
const express = require('express');
const app = express();
app.use(express.json());
app.post('/login', (req, res) => {
const { code, encryptedData, iv } = req.body;
// 校验用户信息 if (code && encryptedData && iv) {
// 获取用户信息 wx.getUserProfile({
success: function (res) {
if (res.userInfo) {
// 返回登录结果 res.json({ success: true });
} else {
// 用户信息错误,返回失败结果 res.json({ success: false, message: '用户信息错误' });
}
},
fail: function (res) {
// 获取用户信息失败,返回失败结果 res.json({ success: false, message: '获取用户信息失败' });
}
});
} else {
// 用户信息错误,返回失败结果 res.json({ success: false, message: '用户信息错误' });
}
});
```
总结
微信小程序授权登录(前后端分离)是一个复杂的过程,需要进行前后端分离,并且需要在服务端校验用户的个人信息。通过上面的示例,我们可以看到,如何在小程序端和服务端之间进行数据交互,以及如何在服务端校验用户的个人信息。