在uni-app中操作uni-id-device
表来记录device_id
与user_id
的映射关系时,校验token的主要目的是确保请求的安全性和验证用户身份的合法性。token通常是一种经过加密或签名的字符串,它包含用户的身份信息以及过期时间等信息,用于在客户端和服务器之间进行身份验证。
以下是一个简化的示例,展示了如何在uni-app中进行token校验并记录device_id
与user_id
的映射关系。假设我们使用一个假设的API接口/api/register-device
来处理这一逻辑。
1. 客户端发送请求
客户端(uni-app)在发送请求时,需要将token包含在请求头中。
uni.request({
url: 'https://yourserver.com/api/register-device',
method: 'POST',
header: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + userToken // userToken是之前获取的token
},
data: {
device_id: uni.getStorageSync('device_id') || uni.getSystemInfoSync().model, // 示例device_id,实际应根据设备唯一标识生成
user_id: userId // 从登录状态或其他途径获取的用户ID
},
success: (res) => {
console.log('Device registered successfully:', res.data);
},
fail: (err) => {
console.error('Failed to register device:', err);
}
});
2. 服务器端校验token并记录映射关系
服务器端接收到请求后,首先校验token的有效性。这里以Node.js和Express为例,展示一个简单的token校验逻辑。
const express = require('express');
const jwt = require('jsonwebtoken');
const app = express();
const SECRET_KEY = 'your_secret_key'; // 用于签名和验证token的密钥
app.use(express.json());
app.post('/api/register-device', (req, res) => {
const token = req.headers['authorization'].split(' ')[1];
jwt.verify(token, SECRET_KEY, (err, decoded) => {
if (err) {
return res.status(401).json({ error: 'Invalid token' });
}
const { device_id, user_id } = req.body;
// 假设你有一个函数saveToDeviceTable来将device_id和user_id保存到数据库
saveToDeviceTable(device_id, user_id)
.then(() => res.json({ message: 'Device registered successfully' }))
.catch((error) => res.status(500).json({ error: error.message }));
});
});
// 假设的保存函数(实际应根据你的数据库实现)
function saveToDeviceTable(device_id, user_id) {
// 数据库保存逻辑...
return Promise.resolve(); // 示例返回成功
}
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
在这个示例中,服务器通过jwt.verify
函数校验token的有效性,如果token有效,则继续处理请求,将device_id
和user_id
保存到uni-id-device
表中。如果token无效,则返回401状态码表示未授权。