添加验证码处理逻辑

This commit is contained in:
张成
2025-08-24 15:40:37 +08:00
parent b92301a887
commit 5e31adee53
5 changed files with 152 additions and 33 deletions

View File

@@ -1,5 +1,6 @@
import Taro from '@tarojs/taro';
import httpService from './httpService';
import tokenManager from '../utils/tokenManager';
// 微信用户信息接口
export interface WechatUserInfo {
@@ -130,7 +131,8 @@ export const send_sms_code = async (phone: string): Promise<SmsResponse> => {
phone: phone
});
if (response.success) {
// 修复响应检查逻辑:检查 code === 0 或 success === true
if (response.code === 0 || response.success === true) {
return {
success: true,
message: '验证码发送成功'
@@ -199,7 +201,14 @@ export const get_user_profile = (): Promise<WechatUserInfo> => {
// 保存用户登录状态
export const save_login_state = (token: string, user_info: WechatUserInfo) => {
try {
Taro.setStorageSync('user_token', token);
// 使用 tokenManager 保存令牌信息设置24小时过期
const expires_at = Date.now() + 24 * 60 * 60 * 1000; // 24小时后过期
tokenManager.setToken({
accessToken: token,
expiresAt: expires_at
});
// 保存用户信息
Taro.setStorageSync('user_info', user_info);
Taro.setStorageSync('is_logged_in', true);
Taro.setStorageSync('login_time', Date.now());
@@ -211,7 +220,10 @@ export const save_login_state = (token: string, user_info: WechatUserInfo) => {
// 清除登录状态
export const clear_login_state = () => {
try {
Taro.removeStorageSync('user_token');
// 使用 tokenManager 清除令牌
tokenManager.clearTokens();
// 清除其他登录状态
Taro.removeStorageSync('user_info');
Taro.removeStorageSync('is_logged_in');
Taro.removeStorageSync('login_time');
@@ -223,22 +235,53 @@ export const clear_login_state = () => {
// 检查是否已登录
export const check_login_status = (): boolean => {
try {
const is_logged_in = Taro.getStorageSync('is_logged_in');
const token = Taro.getStorageSync('user_token');
const login_time = Taro.getStorageSync('login_time');
// 检查登录是否过期7天
if (login_time && Date.now() - login_time > 7 * 24 * 60 * 60 * 1000) {
// 使用 tokenManager 检查令牌有效性
if (!tokenManager.hasValidToken()) {
clear_login_state();
return false;
}
return !!(is_logged_in && token);
const is_logged_in = Taro.getStorageSync('is_logged_in');
return !!is_logged_in;
} catch (error) {
return false;
}
};
// 检查令牌是否需要刷新剩余时间少于1小时时
export const should_refresh_token = (): boolean => {
try {
const remaining_time = tokenManager.getTokenRemainingTime();
const one_hour = 60 * 60 * 1000; // 1小时
return remaining_time > 0 && remaining_time < one_hour;
} catch (error) {
return false;
}
};
// 获取令牌状态信息
export const get_token_status = () => {
try {
const is_valid = tokenManager.hasValidToken();
const remaining_time = tokenManager.getTokenRemainingTime();
const is_expired = tokenManager.isTokenExpired();
return {
is_valid,
remaining_time,
is_expired,
expires_in_minutes: Math.floor(remaining_time / (60 * 1000))
};
} catch (error) {
return {
is_valid: false,
remaining_time: 0,
is_expired: true,
expires_in_minutes: 0
};
}
};
// 获取用户信息
export const get_user_info = (): WechatUserInfo | null => {
try {
@@ -251,7 +294,8 @@ export const get_user_info = (): WechatUserInfo | null => {
// 获取用户token
export const get_user_token = (): string | null => {
try {
return Taro.getStorageSync('user_token') || null;
// 使用 tokenManager 获取令牌
return tokenManager.getAccessToken();
} catch (error) {
return null;
}