mirror of
https://github.com/perfect-panel/ppanel-web.git
synced 2026-02-14 12:21:10 -05:00
52 lines
1.3 KiB
TypeScript
52 lines
1.3 KiB
TypeScript
'use client';
|
|
|
|
import {
|
|
appleLoginCallback,
|
|
facebookLoginCallback,
|
|
googleLoginCallback,
|
|
telegramLoginCallback,
|
|
} from '@/services/common/oauth';
|
|
import { getRedirectUrl, setAuthorization } from '@/utils/common';
|
|
import { useRouter, useSearchParams } from 'next/navigation';
|
|
import { useEffect } from 'react';
|
|
|
|
interface CertificationProps {
|
|
platform: string;
|
|
children: React.ReactNode;
|
|
}
|
|
|
|
export default function Certification({ platform, children }: CertificationProps) {
|
|
const searchParams = useSearchParams();
|
|
const router = useRouter();
|
|
|
|
async function LoginCallback() {
|
|
const body = Object.fromEntries(searchParams.entries()) as any;
|
|
switch (platform) {
|
|
case 'apple':
|
|
return appleLoginCallback(body);
|
|
case 'facebook':
|
|
return facebookLoginCallback(body);
|
|
case 'google':
|
|
return googleLoginCallback(body);
|
|
case 'telegram':
|
|
return telegramLoginCallback(body);
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
useEffect(() => {
|
|
LoginCallback()
|
|
.then((res) => {
|
|
const token = res?.data?.data?.token;
|
|
setAuthorization(token);
|
|
router.replace(getRedirectUrl());
|
|
router.refresh();
|
|
})
|
|
.catch((error) => {
|
|
router.replace('/auth');
|
|
});
|
|
}, [platform, searchParams.values()]);
|
|
|
|
return children;
|
|
}
|