3fc2f23e10
Re-enable one-tap WeChat login, post-SMS OAuth bind, and quick login gates so partner/shop openId flows work again on staging.
30 lines
1.1 KiB
TypeScript
30 lines
1.1 KiB
TypeScript
import { Navigate, useLocation } from 'react-router-dom';
|
|
import { getPartnerProfile, hasPartnerWxSession } from '../lib/api';
|
|
import { usePartnerSession } from '../contexts/PartnerSessionContext';
|
|
import { partnerHomePath } from '../lib/partnerAccess';
|
|
|
|
const PUBLIC_PATHS = new Set(['/login', '/legal/user-agreement', '/legal/privacy-policy']);
|
|
|
|
export default function AuthGate({ children }: { children: React.ReactNode }) {
|
|
const { ready, authenticated, account } = usePartnerSession();
|
|
const location = useLocation();
|
|
|
|
if (!ready) {
|
|
return <div className="empty">加载中...</div>;
|
|
}
|
|
|
|
if (authenticated && location.pathname === '/login') {
|
|
return <Navigate to={partnerHomePath(account ?? getPartnerProfile())} replace />;
|
|
}
|
|
|
|
if (!authenticated && !PUBLIC_PATHS.has(location.pathname)) {
|
|
const profile = getPartnerProfile();
|
|
if (profile && hasPartnerWxSession() && profile.hasWechat) {
|
|
return <Navigate to="/login?quick=1" replace state={{ from: location }} />;
|
|
}
|
|
return <Navigate to="/login" replace state={{ from: location }} />;
|
|
}
|
|
|
|
return <>{children}</>;
|
|
}
|