uni-app中如何检查用户token是否已过期或者无权限,是每个云对象都要加这些判断吗

发布于 1周前 作者 nodeper 来自 Uni-App

uni-app中如何检查用户token是否已过期或者无权限,是每个云对象都要加这些判断吗

项目详情

开发环境、版本号、项目创建方式

项⽬目创建方式 开发环境 版本号
1 回复

在uni-app中,为了检查用户的token是否已过期或者用户是否无权限,通常需要在每个请求云对象之前进行验证。虽然每个云对象都添加验证逻辑显得重复,但可以通过封装请求函数来简化这一过程。以下是一个使用async/awaitPromise进行token验证的示例,展示了如何在一个集中位置处理这些验证逻辑,而不是在每个云对象中重复。

1. 封装请求函数

首先,我们创建一个封装请求的函数,该函数负责在发送请求前检查token的有效性。

// utils/request.js
import uniCloud from '@dcloudio/uni-cloud';

export default async function request(method, url, data = {}, headers = {}) {
    const db = uniCloud.database();
    const userToken = uni.getStorageSync('userToken'); // 假设token保存在本地存储中

    if (!userToken) {
        throw new Error('No token found');
    }

    try {
        // 假设有一个云函数`checkToken`用于验证token
        const res = await uniCloud.callFunction({
            name: 'checkToken',
            data: { token: userToken }
        });

        if (res.result.isValid) {
            // Token有效,继续发送请求
            const cloudRes = await db.request({
                method: method,
                url: url,
                data: data,
                header: headers
            });
            return cloudRes;
        } else {
            // Token无效或过期,处理错误
            throw new Error('Token expired or invalid');
        }
    } catch (error) {
        // 处理请求错误,如网络错误或token验证失败
        console.error('Request error:', error);
        throw error;
    }
}

2. 使用封装请求函数

在需要发送请求的地方,使用封装好的request函数。

// 某个页面或组件中
import request from '@/utils/request';

export default {
    methods: {
        async fetchData() {
            try {
                const data = await request('GET', 'https://api.example.com/data');
                console.log('Data fetched:', data);
            } catch (error) {
                // 处理错误,如token无效或无权限
                console.error('Error fetching data:', error);
                // 可以根据错误类型进行不同的处理,比如跳转到登录页面
                if (error.message === 'No token found' || error.message === 'Token expired or invalid') {
                    uni.navigateTo({ url: '/pages/login/login' });
                }
            }
        }
    }
};

总结

通过封装请求函数,我们避免了在每个云对象中都添加token验证逻辑,从而提高了代码的可维护性和可读性。在实际应用中,你还可以根据具体需求进一步扩展和优化这个封装函数,比如添加请求超时处理、重试机制等。

回到顶部