permission-fix-guide.md
3.08 KB
权限系统问题修复说明
问题描述
用户从商品详情页点击"联系卖家"按钮时,如果没有权限会跳转到注册页面。但是存在以下问题:
- 注册完成后没有正确返回上一页
- 手动返回上一页后权限状态没有刷新
- 点击联系卖家依然进入注册页面
修复内容
1. 注册页面逻辑优化
文件: /src/pages/register/index.vue
- 添加了用户状态管理的导入和初始化
- 修改了注册成功后的处理逻辑:
- 更新用户状态到 store 中
- 设置认证状态为 true
- 智能判断页面跳转逻辑(返回上一页或跳转首页)
2. 权限类型补充
文件: /src/utils/permission.js
- 添加了
CONTACT_SELLER权限类型 - 配置了对应的权限检查规则
修复后的流程
- 用户在商品详情页点击"联系卖家"
- 系统检查用户权限(主要是手机号是否完善)
- 如果没有权限,显示提示并跳转到注册页面
- 用户完善信息并保存
- 新增: 系统自动更新用户状态到 store
- 新增: 智能返回上一页(商品详情页)
- 用户再次点击"联系卖家"时,权限验证通过,正常显示联系弹窗
测试步骤
测试场景1:从商品详情页触发权限检查
- 确保用户信息不完整(特别是手机号为空)
- 进入任意商品详情页
- 点击"联系卖家"按钮
- 验证是否显示权限提示并跳转到注册页面
- 完善用户信息并保存
- 验证是否自动返回商品详情页
- 再次点击"联系卖家"按钮
- 验证是否正常显示联系卖家弹窗
测试场景2:从商品详情页触发买车权限检查
- 确保用户信息不完整
- 进入任意商品详情页
- 点击"我想购买"按钮
- 验证权限检查和页面跳转流程
- 完善信息后验证功能是否正常
测试场景3:直接访问注册页面
- 直接访问注册页面(不是从其他页面跳转)
- 完善信息并保存
- 验证是否跳转到首页(而不是返回上一页)
技术细节
用户状态更新
// 更新用户状态
userStore.updateUserInfo({
...formData,
avatar: formData.avatar_url
})
userStore.isAuthenticated = true
智能页面跳转
// 获取页面栈信息
const pages = Taro.getCurrentPages()
// 如果页面栈中有多于1个页面,说明是从其他页面跳转过来的
if (pages.length > 1) {
// 返回上一页,权限状态已更新,用户可以正常使用功能
Taro.navigateBack()
} else {
// 如果是直接访问注册页面,跳转到首页
Taro.switchTab({
url: '/pages/index/index'
})
}
注意事项
- 修复后用户状态会实时更新,无需刷新页面
- 权限检查基于用户的手机号字段
- 支持多种权限类型的扩展
- 保持了良好的用户体验,避免了重复的权限验证流程
相关文件
-
/src/pages/register/index.vue- 注册页面 -
/src/pages/productDetail/index.vue- 商品详情页 -
/src/utils/permission.js- 权限管理工具 -
/src/stores/user.js- 用户状态管理