"use client";
import {
exchangeCode,
consumePostLoginRedirect,
fetchAuthConfig,
fetchMe,
redeemHandoff,
storeTokens,
} from "@/lib/auth";
import { useRouter, useSearchParams } from "next/navigation";
import { Suspense, useEffect, useRef, useState } from "react";
function CallbackInner() {
const params = useSearchParams();
const router = useRouter();
const [error, setError] = useState(null);
const exchangeStarted = useRef(false);
useEffect(() => {
if (exchangeStarted.current) return;
const handoff = params.get("handoff");
const code = params.get("code");
if (!handoff && !code) {
setError("کد احراز هویت دریافت نشد");
return;
}
exchangeStarted.current = true;
(async () => {
try {
let tokens;
if (handoff) {
tokens = await redeemHandoff(handoff);
} else {
const config = await fetchAuthConfig();
tokens = await exchangeCode(code!, config.callback_url, params.get("state"));
}
storeTokens(tokens);
const me = await fetchMe(tokens.access_token);
if (me.requires_mobile_verification) {
router.replace("/auth/verify-mobile");
return;
}
router.replace(consumePostLoginRedirect("/dashboard"));
} catch (e) {
exchangeStarted.current = false;
setError(e instanceof Error ? e.message : "خطای ناشناخته");
}
})();
}, [params, router]);
if (error) {
return {error}
;
}
return در حال تکمیل ورود...
;
}
export default function AuthCallbackPage() {
return (
...
}>
);
}