6.2 KiB
6.2 KiB
邀请码功能修复说明
🐛 问题
用户反馈:"好友登录的时候输入这个邀请码还是不行"
🔍 问题分析
1. 后端检查 ✅
测试后端 API:
python test_invite_code.py
结果:后端 API 工作正常
/config/invite/info- 获取邀请码 ✅/config/invite/apply- 使用邀请码 ✅
2. 前端问题 ❌
检查前端代码 xuniYou/pages/login/index.vue:
发现的问题:
问题 1:认证方式不正确
// 旧代码
header: {
'Content-Type': 'application/json',
'token': uni.getStorageSync("token") || "",
},
后端支持的认证方式:
Authorization: Bearer <token>✅ 推荐X-Token: <token>✅token: <token>(header) ✅token: <token>(cookie) ✅
虽然第3种方式理论上可以,但是使用 Authorization: Bearer 更标准。
问题 2:错误处理不完善
- 邀请码使用失败时,只在控制台输出,用户看不到错误信息
- 没有检查 token 是否存在
- 没有详细的日志输出
问题 3:响应数据结构处理不当
// 旧代码
if (res.data.code === 1) {
uni.showToast({
title: res.data.data.message, // ← 可能为 undefined
icon: 'success'
});
}
✅ 解决方案
修改文件:xuniYou/pages/login/index.vue
修改 1:使用标准的 Authorization header
修改前:
header: {
'Content-Type': 'application/json',
'token': uni.getStorageSync("token") || "",
},
修改后:
header: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + token,
},
修改 2:添加 token 检查
const token = uni.getStorageSync("token");
console.log('准备使用邀请码:', this.inviteCode);
console.log('当前 token:', token);
if (!token) {
console.error('Token 不存在,无法使用邀请码');
uni.showToast({
title: '登录状态异常,请重新登录',
icon: 'none'
});
return;
}
修改 3:完善错误处理
success: (res) => {
console.log('邀请码使用响应:', res);
if (res.data && res.data.code === 1) {
uni.showToast({
title: res.data.data.message || '邀请码使用成功',
icon: 'success'
});
} else {
// 邀请码使用失败,显示错误信息
const errorMsg = res.data ? res.data.message : '邀请码使用失败';
console.log('邀请码使用失败:', errorMsg);
uni.showToast({
title: errorMsg,
icon: 'none',
duration: 2000
});
}
},
🎯 修改位置
文件:xuniYou/pages/login/index.vue
方法:applyInviteCode()
行号:约 432-470 行
📊 修改效果
修改前
- 邀请码使用失败,用户看不到错误信息
- 只在控制台输出日志
- 认证方式可能不标准
修改后
- 邀请码使用失败,显示具体的错误信息
- 添加了详细的日志输出,方便调试
- 使用标准的
Authorization: Bearer认证方式 - 添加了 token 检查,防止空 token 请求
🚀 测试步骤
步骤 1:获取邀请码
- 用户 A 登录应用
- 进入"我的" → "邀请好友"
- 复制邀请码(例如:
UAAZAM)
步骤 2:使用邀请码
- 用户 B 打开登录页面
- 输入手机号和验证码
- 在"邀请码"输入框中输入
UAAZAM - 点击登录
步骤 3:验证结果
成功的情况:
- 显示提示:"邀请码使用成功!您获得了5金币"
- 用户 B 的金币余额增加 5 金币
- 用户 A 的金币余额增加 10 金币
- 用户 A 的邀请计数 +1
失败的情况:
- 显示具体的错误信息:
- "邀请码不存在" - 邀请码输入错误
- "您已经使用过邀请码" - 用户已经使用过邀请码
- "不能使用自己的邀请码" - 用户输入了自己的邀请码
🔍 调试方法
查看前端日志
打开浏览器开发者工具(F12),查看 Console 标签页:
准备使用邀请码: UAAZAM
当前 token: 3932cd35-4238-4c3f-ad5c-ad6ce9454e79
邀请码使用响应: {data: {code: 1, msg: 'ok', data: {...}}}
查看后端日志
后端服务会输出详细日志:
INFO: POST /config/invite/apply HTTP/1.1" 200 OK
认证调试 - 提取的 token: 3932cd35-4238-4c3f-ad5c-ad6ce9454e79
查看数据库
-- 查看用户的邀请信息
SELECT id, nickname, invite_code, invited_by, invite_count, invite_reward_total, money
FROM nf_user
WHERE id IN (70, 71);
-- 查看金币日志
SELECT * FROM nf_user_money_log
WHERE user_id IN (70, 71)
ORDER BY id DESC
LIMIT 10;
📝 常见问题
Q1: 提示"邀请码不存在"
原因:
- 邀请码输入错误
- 邀请码包含空格或特殊字符
解决:
- 检查邀请码是否正确(区分大小写)
- 确保没有多余的空格
Q2: 提示"您已经使用过邀请码"
原因:
- 用户之前已经使用过邀请码
- 数据库中
invited_by字段不为空
解决:
- 每个用户只能使用一次邀请码
- 如果需要重置,需要手动清空数据库中的
invited_by字段
Q3: 提示"不能使用自己的邀请码"
原因:
- 用户输入了自己的邀请码
解决:
- 使用其他用户的邀请码
Q4: 没有任何提示
原因:
- 网络错误
- 后端服务未启动
- Token 无效
解决:
- 检查后端服务是否运行:访问 http://localhost:30101/docs
- 检查浏览器控制台是否有错误
- 检查 token 是否有效
💡 技术细节
邀请码生成规则
def _generate_invite_code() -> str:
"""生成6位邀请码(不含易混淆字符)"""
chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789' # 去掉 0O1I 等易混淆字符
return ''.join(random.choice(chars) for _ in range(6))
奖励规则
- 邀请人获得:10 金币
- 被邀请人获得:5 金币
数据库字段
invite_code- 用户的邀请码(唯一)invited_by- 被谁邀请(邀请码)invite_count- 邀请人数invite_reward_total- 邀请奖励总额
修复说明版本: 1.0
创建时间: 2026-02-04 19:00
状态: ✅ 已修复