permission-fix-guide.md 3.08 KB

权限系统问题修复说明

问题描述

用户从商品详情页点击"联系卖家"按钮时,如果没有权限会跳转到注册页面。但是存在以下问题:

  1. 注册完成后没有正确返回上一页
  2. 手动返回上一页后权限状态没有刷新
  3. 点击联系卖家依然进入注册页面

修复内容

1. 注册页面逻辑优化

文件: /src/pages/register/index.vue

  • 添加了用户状态管理的导入和初始化
  • 修改了注册成功后的处理逻辑:
    • 更新用户状态到 store 中
    • 设置认证状态为 true
    • 智能判断页面跳转逻辑(返回上一页或跳转首页)

2. 权限类型补充

文件: /src/utils/permission.js

  • 添加了 CONTACT_SELLER 权限类型
  • 配置了对应的权限检查规则

修复后的流程

  1. 用户在商品详情页点击"联系卖家"
  2. 系统检查用户权限(主要是手机号是否完善)
  3. 如果没有权限,显示提示并跳转到注册页面
  4. 用户完善信息并保存
  5. 新增: 系统自动更新用户状态到 store
  6. 新增: 智能返回上一页(商品详情页)
  7. 用户再次点击"联系卖家"时,权限验证通过,正常显示联系弹窗

测试步骤

测试场景1:从商品详情页触发权限检查

  1. 确保用户信息不完整(特别是手机号为空)
  2. 进入任意商品详情页
  3. 点击"联系卖家"按钮
  4. 验证是否显示权限提示并跳转到注册页面
  5. 完善用户信息并保存
  6. 验证是否自动返回商品详情页
  7. 再次点击"联系卖家"按钮
  8. 验证是否正常显示联系卖家弹窗

测试场景2:从商品详情页触发买车权限检查

  1. 确保用户信息不完整
  2. 进入任意商品详情页
  3. 点击"我想购买"按钮
  4. 验证权限检查和页面跳转流程
  5. 完善信息后验证功能是否正常

测试场景3:直接访问注册页面

  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'
  })
}

注意事项

  1. 修复后用户状态会实时更新,无需刷新页面
  2. 权限检查基于用户的手机号字段
  3. 支持多种权限类型的扩展
  4. 保持了良好的用户体验,避免了重复的权限验证流程

相关文件

  • /src/pages/register/index.vue - 注册页面
  • /src/pages/productDetail/index.vue - 商品详情页
  • /src/utils/permission.js - 权限管理工具
  • /src/stores/user.js - 用户状态管理