frontend changes
This commit is contained in:
parent
48023f9333
commit
6baf9080a7
@ -131,7 +131,8 @@ const addTokenRefreshInterceptor = (client: typeof authApiClient) => {
|
||||
safeLocalStorage.removeItem('codenuk_user');
|
||||
// Prevent redirect loops by checking current location
|
||||
if (typeof window !== 'undefined' && !window.location.pathname.includes('/signin')) {
|
||||
window.location.href = '/signin?error=Please sign in to continue.';
|
||||
const returnUrl = encodeURIComponent(window.location.pathname + window.location.search)
|
||||
window.location.href = `/signin?error=Please sign in to continue.&returnUrl=${returnUrl}`;
|
||||
}
|
||||
return Promise.reject(error);
|
||||
} catch (refreshError) {
|
||||
@ -140,7 +141,8 @@ const addTokenRefreshInterceptor = (client: typeof authApiClient) => {
|
||||
safeLocalStorage.removeItem('codenuk_user');
|
||||
// Prevent redirect loops by checking current location
|
||||
if (typeof window !== 'undefined' && !window.location.pathname.includes('/signin')) {
|
||||
window.location.href = '/signin?error=Session expired. Please sign in again.';
|
||||
const returnUrl = encodeURIComponent(window.location.pathname + window.location.search)
|
||||
window.location.href = `/signin?error=Session expired. Please sign in again.&returnUrl=${returnUrl}`;
|
||||
}
|
||||
return Promise.reject(refreshError);
|
||||
}
|
||||
|
||||
@ -27,6 +27,16 @@ export function SignInForm({ }: SignInFormProps) {
|
||||
|
||||
const router = useRouter()
|
||||
const { setUserFromApi } = useAuth()
|
||||
|
||||
// Get return URL from query parameters
|
||||
const getReturnUrl = () => {
|
||||
if (typeof window !== 'undefined') {
|
||||
const urlParams = new URLSearchParams(window.location.search)
|
||||
const returnUrl = urlParams.get('returnUrl')
|
||||
return returnUrl ? decodeURIComponent(returnUrl) : null
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
const handleSubmit = async (e: React.FormEvent) => {
|
||||
e.preventDefault()
|
||||
@ -48,9 +58,12 @@ export function SignInForm({ }: SignInFormProps) {
|
||||
// Persist for refresh
|
||||
localStorage.setItem("codenuk_user", JSON.stringify(response.data.user))
|
||||
|
||||
// Redirect based on user role with error handling
|
||||
// Redirect based on return URL or user role
|
||||
try {
|
||||
if (response.data.user.role === 'admin') {
|
||||
const returnUrl = getReturnUrl()
|
||||
if (returnUrl && returnUrl !== '/signin' && returnUrl !== '/signup') {
|
||||
router.push(returnUrl)
|
||||
} else if (response.data.user.role === 'admin') {
|
||||
router.push("/admin")
|
||||
} else {
|
||||
router.push("/")
|
||||
@ -58,7 +71,12 @@ export function SignInForm({ }: SignInFormProps) {
|
||||
} catch (redirectError) {
|
||||
console.error('Redirect failed:', redirectError)
|
||||
// Fallback redirect
|
||||
window.location.href = response.data.user.role === 'admin' ? '/admin' : '/'
|
||||
const returnUrl = getReturnUrl()
|
||||
if (returnUrl && returnUrl !== '/signin' && returnUrl !== '/signup') {
|
||||
window.location.href = returnUrl
|
||||
} else {
|
||||
window.location.href = response.data.user.role === 'admin' ? '/admin' : '/'
|
||||
}
|
||||
}
|
||||
} else {
|
||||
setError("Invalid response from server. Please try again.")
|
||||
|
||||
@ -73,12 +73,16 @@ export function SignUpForm({ onSignUpSuccess }: SignUpFormProps) {
|
||||
// Default behavior - redirect to signin with message
|
||||
if (typeof window !== 'undefined') {
|
||||
const message = encodeURIComponent("Account created successfully! Please check your email to verify your account.")
|
||||
// Preserve return URL if it exists
|
||||
const urlParams = new URLSearchParams(window.location.search)
|
||||
const returnUrl = urlParams.get('returnUrl')
|
||||
const redirectUrl = returnUrl ? `/signin?message=${message}&returnUrl=${returnUrl}` : `/signin?message=${message}`
|
||||
try {
|
||||
router.push(`/signin?message=${message}`)
|
||||
router.push(redirectUrl)
|
||||
} catch (redirectError) {
|
||||
console.error('Signup form redirect failed:', redirectError)
|
||||
// Fallback redirect
|
||||
window.location.href = `/signin?message=${message}`
|
||||
window.location.href = redirectUrl
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -16,12 +16,16 @@ export function SignUpPage() {
|
||||
setTimeout(() => {
|
||||
if (typeof window !== 'undefined') {
|
||||
const message = encodeURIComponent("Please check your email to verify your account")
|
||||
// Preserve return URL if it exists
|
||||
const urlParams = new URLSearchParams(window.location.search)
|
||||
const returnUrl = urlParams.get('returnUrl')
|
||||
const redirectUrl = returnUrl ? `/signin?message=${message}&returnUrl=${returnUrl}` : `/signin?message=${message}`
|
||||
try {
|
||||
router.push(`/signin?message=${message}`)
|
||||
router.push(redirectUrl)
|
||||
} catch (redirectError) {
|
||||
console.error('Signup redirect failed:', redirectError)
|
||||
// Fallback redirect
|
||||
window.location.href = `/signin?message=${message}`
|
||||
window.location.href = redirectUrl
|
||||
}
|
||||
}
|
||||
}, 3000)
|
||||
|
||||
@ -339,7 +339,10 @@ function TemplateSelectionStep({ onNext }: { onNext: (template: Template) => voi
|
||||
<p className="text-white/60">{error}</p>
|
||||
<div className="flex justify-center space-x-4">
|
||||
<Button
|
||||
onClick={() => window.location.href = '/signin'}
|
||||
onClick={() => {
|
||||
const returnUrl = encodeURIComponent(window.location.pathname + window.location.search)
|
||||
window.location.href = `/signin?returnUrl=${returnUrl}`
|
||||
}}
|
||||
className="bg-orange-500 hover:bg-orange-400 text-black"
|
||||
>
|
||||
Sign In
|
||||
@ -462,7 +465,10 @@ function TemplateSelectionStep({ onNext }: { onNext: (template: Template) => voi
|
||||
You're currently viewing public templates.
|
||||
<Button
|
||||
variant="link"
|
||||
onClick={() => window.location.href = '/signin'}
|
||||
onClick={() => {
|
||||
const returnUrl = encodeURIComponent(window.location.pathname + window.location.search)
|
||||
window.location.href = `/signin?returnUrl=${returnUrl}`
|
||||
}}
|
||||
className="text-orange-400 hover:text-orange-300 p-0 h-auto font-semibold ml-1"
|
||||
>
|
||||
Sign in
|
||||
|
||||
Loading…
Reference in New Issue
Block a user