diff --git a/app/api/v1/cps_redirect.py b/app/api/v1/cps_redirect.py index ee7aa0b..57b5387 100644 --- a/app/api/v1/cps_redirect.py +++ b/app/api/v1/cps_redirect.py @@ -83,7 +83,10 @@ def cps_landing(code: str, request: Request, db: Session = Depends(get_db)): redirect_uri = f"{settings.CPS_REDIRECT_BASE.rstrip('/')}/wx/oauth/cb" auth_url = wx_oauth.build_authorize_url(redirect_uri, "snsapi_base", f"base:{code}") return RedirectResponse(auth_url, status_code=302) - _record(db, link, request, "visit", openid=openid) + # ?authed=1 是 userinfo 授权后的自动回跳重载,不是用户主动打开:visit 已在授权前那次 + # 落地(base 静默授权回来那次)记过,这里再记会让每个走"领券授权"的用户 visit 虚增 1。 + if request.query_params.get("authed") != "1": + _record(db, link, request, "visit", openid=openid) if link.platform == "taobao": activity = db.get(CpsActivity, link.activity_id) image_url = (activity.image_url if activity else None) or _DEFAULT_TAOBAO_IMAGE @@ -201,8 +204,9 @@ function copyToken(){ if(UINFO_URL){location.href=UINFO_URL;return} doCopy(); } -// userinfo 授权回流(?authed=1):自动复制,把"点领券→授权→复制"衔接成一步无感 -if(location.search.indexOf('authed=1')>=0){doCopy()} +// userinfo 授权回流(?authed=1):自动复制,把"点领券→授权→复制"衔接成一步无感; +// 复制后用 replaceState 清掉 authed=1,避免刷新/微信返回(BFCache)重载时重复触发复制上报。 +if(location.search.indexOf('authed=1')>=0){doCopy();history.replaceState(null,'',location.pathname)} """