fix(api): 替换所有接口请求的域名为 guilixu-api.websoft.top
- 将获取 STS Token 的接口地址由 paopao-api 改为 guilixu-api - 更新图片上传接口地址为新的 guilixu-api 域名 - 修改用户推广页面中邀请码链接和二维码接口的域名 - 更改注册页微信登录接口请求的域名为 guilixu-api
This commit is contained in:
@@ -1,10 +1,25 @@
|
||||
import Taro from '@tarojs/taro'
|
||||
import { clearStorageByLoginUser } from '@/utils/server'
|
||||
|
||||
/**
|
||||
* 登录态 / 游客态 标识。
|
||||
* - member: 已登录
|
||||
* - guest : 游客(未登录或登录态过期)
|
||||
*/
|
||||
export type UserMode = 'member' | 'guest'
|
||||
|
||||
export function isLoggedIn(): boolean {
|
||||
return !!Taro.getStorageSync('access_token') && !!Taro.getStorageSync('UserId')
|
||||
}
|
||||
|
||||
export function getUserMode(): UserMode {
|
||||
return isLoggedIn() ? 'member' : 'guest'
|
||||
}
|
||||
|
||||
export function isGuest(): boolean {
|
||||
return !isLoggedIn()
|
||||
}
|
||||
|
||||
export function goToRegister(options?: { redirect?: string }) {
|
||||
const redirect = options?.redirect ? `?redirect=${encodeURIComponent(options.redirect)}` : ''
|
||||
Taro.navigateTo({ url: `/passport/register${redirect}` })
|
||||
|
||||
95
src/utils/login-guard.ts
Normal file
95
src/utils/login-guard.ts
Normal file
@@ -0,0 +1,95 @@
|
||||
import Taro from '@tarojs/taro'
|
||||
import { isLoggedIn, goToRegister } from './auth'
|
||||
|
||||
/**
|
||||
* 需要登录才能执行的动作类型。
|
||||
* - 这些点都是"成交前置行为":加购、结算、收藏、领券、查看订单、下单等
|
||||
* - 业务页(首页/分类/搜索/详情)始终对游客开放,价格字段做脱敏即可
|
||||
*/
|
||||
export type LoginRequiredAction =
|
||||
| 'addToCart'
|
||||
| 'buyNow'
|
||||
| 'checkout'
|
||||
| 'favorite'
|
||||
| 'receiveCoupon'
|
||||
| 'viewOrder'
|
||||
| 'payOrder'
|
||||
| 'submitComment'
|
||||
|
||||
const ACTION_LABEL: Record<LoginRequiredAction, string> = {
|
||||
addToCart: '加入购物车',
|
||||
buyNow: '立即购买',
|
||||
checkout: '结算',
|
||||
favorite: '收藏',
|
||||
receiveCoupon: '领取优惠券',
|
||||
viewOrder: '查看订单',
|
||||
payOrder: '支付订单',
|
||||
submitComment: '提交评价',
|
||||
}
|
||||
|
||||
const ACTION_REDIRECT_FALLBACK: Record<LoginRequiredAction, string> = {
|
||||
addToCart: '/pages/shop/cart',
|
||||
buyNow: '/pages/shop/cart',
|
||||
checkout: '/pages/shop/cart',
|
||||
favorite: '/pages/user/favorite-list',
|
||||
receiveCoupon: '/pages/index/coupon-center',
|
||||
viewOrder: '/pages/order/order',
|
||||
payOrder: '/pages/order/order',
|
||||
submitComment: '/pages/order/order',
|
||||
}
|
||||
|
||||
export interface RequireLoginOptions {
|
||||
/** 动作类型,用于生成提示文案 */
|
||||
action: LoginRequiredAction
|
||||
/** 登录后跳回的目标 URL(相对于本小程序),不传则用动作默认值 */
|
||||
redirect?: string
|
||||
/** 自定义弹窗标题 */
|
||||
title?: string
|
||||
/** 自定义弹窗内容(不传则按 action 自动生成) */
|
||||
content?: string
|
||||
/**
|
||||
* true: 不弹窗,直接跳登录页(仅用于"非常确定用户就要登录"的场景,比如优惠券领取)
|
||||
* 默认 false: 弹一个非阻塞的二次确认
|
||||
*/
|
||||
silent?: boolean
|
||||
}
|
||||
|
||||
/**
|
||||
* 行为级登录守卫:游客态触发时弹出一个非阻塞的二次确认。
|
||||
*
|
||||
* 返回:
|
||||
* - true : 已登录,可继续执行原动作
|
||||
* - false : 游客态,已拦截(弹窗点了取消 / 弹窗点了去登录但还在当前页停留)
|
||||
*
|
||||
* 微信审核要点:
|
||||
* 1. 永远不要在 useLaunch / onLoad 里主动调;
|
||||
* 2. 永远不要在 tabBar 切换时调(tabBar 三个页面要 100% 游客可浏览);
|
||||
* 3. 不要在 onShow 里无脑调,否则审核员每次切回都要点确认,体验差。
|
||||
*/
|
||||
export function requireLogin(options: RequireLoginOptions): boolean {
|
||||
if (isLoggedIn()) return true
|
||||
|
||||
const actionLabel = ACTION_LABEL[options.action]
|
||||
const redirect = options.redirect || ACTION_REDIRECT_FALLBACK[options.action]
|
||||
const title = options.title || '需要登录'
|
||||
const content = options.content || `登录后才能${actionLabel},是否前往登录?`
|
||||
|
||||
if (options.silent) {
|
||||
goToRegister({ redirect })
|
||||
return false
|
||||
}
|
||||
|
||||
Taro.showModal({
|
||||
title,
|
||||
content,
|
||||
confirmText: '去登录',
|
||||
cancelText: '再逛逛',
|
||||
confirmColor: '#0e932e',
|
||||
success: ({ confirm }) => {
|
||||
if (confirm) {
|
||||
goToRegister({ redirect })
|
||||
}
|
||||
},
|
||||
})
|
||||
return false
|
||||
}
|
||||
Reference in New Issue
Block a user