本应用实现了简化的游客模式权限控制,仅针对4个关键动作进行登录拦截,其他功能游客可正常使用。
商品详情页-加入购物车按钮
PROTECTED_ACTIONS.ADD_TO_CART
商品详情页-立即购买按钮
PROTECTED_ACTIONS.BUY_NOW
点击"我的"tab
PROTECTED_ACTIONS.VIEW_MY_PAGE
点击"乐购"tab
PROTECTED_ACTIONS.VIEW_LEGOU
utils/auth.js
- 权限控制核心逻辑(仅4个动作)pages/product/detail.vue
- 商品详情页权限检查pages/user/index.vue
- 我的页面权限检查pages/legou/index.vue
- 乐购页面权限检查pages/test/auth-test.vue
- 权限测试页面// 1. 检查登录状态
if (isLoggedIn()) {
// 已登录,执行操作
callback()
} else {
// 未登录,显示提示并跳转登录
showLoginModal()
}
export function requireAuth(callback, options = {}) {
if (isLoggedIn()) {
// 已登录,执行回调
if (typeof callback === 'function') {
callback()
}
return true
} else {
// 未登录,显示提示并跳转登录
const message = options.message || actionMessages[options.action]
showLoginModal(message, options.returnUrl)
return false
}
}
pages/product/detail.vue
)// 加入购物车
addToCart() {
requireAuth(() => {
// 执行加入购物车逻辑
console.log('🛒 加入购物车:', this.productId)
}, {
action: PROTECTED_ACTIONS.ADD_TO_CART,
returnUrl: `/pages/product/detail?id=${this.productId}`
})
},
// 立即购买
buyNow() {
requireAuth(() => {
// 执行立即购买逻辑
console.log('🛒 立即购买:', this.productId)
}, {
action: PROTECTED_ACTIONS.BUY_NOW,
returnUrl: `/pages/product/detail?id=${this.productId}`
})
}
pages/user/index.vue
)onShow() {
this.checkLoginStatus()
// 无论是否登录都进行权限检查,确保游客模式下能正确触发登录
this.checkAuthAccess()
this.updateTabBar()
},
checkAuthAccess() {
requireAuth(() => {
console.log('用户已登录,可以访问个人中心')
this.checkLoginStatus()
}, {
action: PROTECTED_ACTIONS.VIEW_MY_PAGE,
message: '访问个人中心需要先登录'
})
}
pages/legou/index.vue
)onShow() {
// 乐购页面需要登录权限,无论是否登录都进行权限检查
this.checkAuthAccess()
this.updateTabBar()
},
checkAuthAccess() {
requireAuth(() => {
console.log('用户已登录,可以访问乐购')
}, {
action: PROTECTED_ACTIONS.VIEW_LEGOU,
message: '访问乐购页面需要先登录'
})
}
访问 /pages/test/auth-test
页面可以测试所有权限控制功能:
onShow
生命周期中进行权限检查如需添加新的权限控制点,只需:
PROTECTED_ACTIONS
中添加新的action类型actionMessages
中添加对应的提示信息在相应页面调用 requireAuth
函数
// 添加新的权限控制点
requireAuth(() => {
// 执行需要登录的操作
}, {
action: PROTECTED_ACTIONS.NEW_ACTION,
returnUrl: '/pages/current/page'
})