mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-10-05 07:26:36 +08:00
fix(auth): register CAP scope, 400 on captcha, 403 for permission
Navigating from login reused a send_email_code token on register. Captcha failure used 401 so the client stored /register as the post-login target and never left the page. Permission denials now return 403, and the API client no longer wipes the session on 401.
This commit is contained in:
@@ -60,13 +60,13 @@ export function CapWidget({
|
||||
}
|
||||
};
|
||||
|
||||
// Auto-start on mount (only when autoStart is enabled)
|
||||
useEffect(() => {
|
||||
solving.current = false;
|
||||
if (autoStart) {
|
||||
void solve();
|
||||
}
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, []);
|
||||
}, [autoStart, scope]);
|
||||
|
||||
return (
|
||||
<div className='flex items-center gap-2 rounded-lg border border-border/60 bg-muted/30 px-3 py-2 text-sm'>
|
||||
|
||||
@@ -82,14 +82,9 @@ export function RegisterForm() {
|
||||
);
|
||||
const capAutoSolve = configBool(publicConfigQuery.data?.cap_auto_solve, true);
|
||||
|
||||
const [capScope, setCapScope] = useState<'send_email_code' | 'register'>(
|
||||
'send_email_code',
|
||||
);
|
||||
|
||||
// 监听 emailRegisterEnabled 改变初始 scope
|
||||
useEffect(() => {
|
||||
setCapScope(emailRegisterEnabled ? 'send_email_code' : 'register');
|
||||
}, [emailRegisterEnabled]);
|
||||
const [capAfterEmailCode, setCapAfterEmailCode] = useState(false);
|
||||
const capScope: 'send_email_code' | 'register' =
|
||||
emailRegisterEnabled && !capAfterEmailCode ? 'send_email_code' : 'register';
|
||||
|
||||
const capTokenRef = useRef<string | null>(null);
|
||||
const [capReady, setCapReady] = useState(false);
|
||||
@@ -131,6 +126,9 @@ export function RegisterForm() {
|
||||
},
|
||||
onSuccess: (user) => {
|
||||
setUser(user);
|
||||
if (typeof window !== 'undefined') {
|
||||
sessionStorage.removeItem('redirect_after_login');
|
||||
}
|
||||
router.replace(redirectTarget);
|
||||
toast.success(t('success'));
|
||||
},
|
||||
@@ -162,7 +160,7 @@ export function RegisterForm() {
|
||||
setRegisterCooldown(60);
|
||||
toast.success(t('codeSent'));
|
||||
if (capEnabled) {
|
||||
setCapScope('register');
|
||||
setCapAfterEmailCode(true);
|
||||
capTokenRef.current = null;
|
||||
setCapReady(false);
|
||||
setCapResetKey((key) => key + 1);
|
||||
@@ -365,7 +363,7 @@ export function RegisterForm() {
|
||||
|
||||
{capEnabled && (
|
||||
<CapWidget
|
||||
key={capResetKey}
|
||||
key={`${capResetKey}-${capScope}`}
|
||||
scope={capScope}
|
||||
onToken={handleCapToken}
|
||||
onError={handleCapError}
|
||||
|
||||
Reference in New Issue
Block a user