This commit is contained in:
parent
baa59654db
commit
3fbe5ea039
|
@ -1,16 +1,48 @@
|
|||
"use client";
|
||||
|
||||
import React, { createContext, useContext, useState, useEffect, useCallback } from 'react';
|
||||
import React, { createContext, useContext, useState, useEffect, useCallback, Suspense } from 'react';
|
||||
import { useRouter, useSearchParams } from 'next/navigation';
|
||||
|
||||
const AuthContext = createContext(null);
|
||||
|
||||
function AuthHandler({ setToken, setNoExtension, setLoading, children }) {
|
||||
const router = useRouter();
|
||||
const searchParams = useSearchParams();
|
||||
|
||||
useEffect(() => {
|
||||
const tokenFromParams = searchParams.get('token');
|
||||
if (tokenFromParams) {
|
||||
if (tokenFromParams === 'noext.0') {
|
||||
setNoExtension(true);
|
||||
setToken(null);
|
||||
localStorage.removeItem('session_token');
|
||||
} else {
|
||||
setToken(tokenFromParams);
|
||||
localStorage.setItem('session_token', tokenFromParams);
|
||||
setNoExtension(false);
|
||||
}
|
||||
// Clean URL
|
||||
router.replace('/dashboard', undefined, { shallow: true });
|
||||
}
|
||||
}, [searchParams, router, setToken, setNoExtension]);
|
||||
|
||||
useEffect(() => {
|
||||
const storedToken = localStorage.getItem('session_token');
|
||||
if (storedToken) {
|
||||
setToken(storedToken);
|
||||
setNoExtension(false);
|
||||
}
|
||||
setLoading(false);
|
||||
}, [setLoading, setToken, setNoExtension]);
|
||||
|
||||
return <>{children}</>;
|
||||
}
|
||||
|
||||
export function AuthProvider({ children }) {
|
||||
const [token, setToken] = useState(null);
|
||||
const [noExtension, setNoExtension] = useState(false);
|
||||
const [loading, setLoading] = useState(true);
|
||||
const router = useRouter();
|
||||
const searchParams = useSearchParams();
|
||||
|
||||
const logout = useCallback(async () => {
|
||||
if (token) {
|
||||
|
@ -29,32 +61,6 @@ export function AuthProvider({ children }) {
|
|||
router.push('/dashboard');
|
||||
}, [token, router]);
|
||||
|
||||
useEffect(() => {
|
||||
const tokenFromParams = searchParams.get('token');
|
||||
const storedToken = localStorage.getItem('session_token');
|
||||
|
||||
if (tokenFromParams) {
|
||||
if (tokenFromParams === 'noext.0') {
|
||||
setNoExtension(true);
|
||||
setToken(null);
|
||||
localStorage.removeItem('session_token');
|
||||
} else {
|
||||
setToken(tokenFromParams);
|
||||
localStorage.setItem('session_token', tokenFromParams);
|
||||
setNoExtension(false);
|
||||
}
|
||||
setLoading(false);
|
||||
// Clean URL
|
||||
router.replace('/dashboard', undefined, { shallow: true });
|
||||
} else if (storedToken) {
|
||||
setToken(storedToken);
|
||||
setNoExtension(false);
|
||||
setLoading(false);
|
||||
} else {
|
||||
setLoading(false);
|
||||
}
|
||||
}, [searchParams, router]);
|
||||
|
||||
const value = {
|
||||
token,
|
||||
isLoggedIn: !!token,
|
||||
|
@ -65,7 +71,11 @@ export function AuthProvider({ children }) {
|
|||
|
||||
return (
|
||||
<AuthContext.Provider value={value}>
|
||||
<Suspense fallback={null}>
|
||||
<AuthHandler setToken={setToken} setNoExtension={setNoExtension} setLoading={setLoading}>
|
||||
{children}
|
||||
</AuthHandler>
|
||||
</Suspense>
|
||||
</AuthContext.Provider>
|
||||
);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue