mirror of
https://github.com/makeplane/plane
synced 2024-06-14 14:31:34 +00:00
fix: 404 when redirecting user clicks on Sign In button (#2349)
* fix: 404 when redirecting user to login page * fix: next_path redirection not working * fix: authentication workflow update in plane deploy --------- Co-authored-by: gurusainath <gurusainath007@gmail.com>
This commit is contained in:
parent
18bcf55f78
commit
9482cc3a73
@ -19,6 +19,7 @@ export const SignInView = observer(() => {
|
|||||||
const { user: userStore } = useMobxStore();
|
const { user: userStore } = useMobxStore();
|
||||||
|
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
const { next_path } = router.query as { next_path: string };
|
||||||
|
|
||||||
const { setToastAlert } = useToast();
|
const { setToastAlert } = useToast();
|
||||||
|
|
||||||
@ -31,17 +32,17 @@ export const SignInView = observer(() => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const onSignInSuccess = (response: any) => {
|
const onSignInSuccess = (response: any) => {
|
||||||
const isOnboarded = response?.user?.onboarding_step?.profile_complete || false;
|
|
||||||
|
|
||||||
const nextPath = router.asPath.includes("next_path") ? router.asPath.split("/?next_path=")[1] : "/login";
|
|
||||||
|
|
||||||
userStore.setCurrentUser(response?.user);
|
userStore.setCurrentUser(response?.user);
|
||||||
|
|
||||||
if (!isOnboarded) {
|
const isOnboard = response?.user?.onboarding_step?.profile_complete || false;
|
||||||
router.push(`/onboarding?next_path=${nextPath}`);
|
|
||||||
return;
|
if (isOnboard) {
|
||||||
|
if (next_path) router.push(next_path);
|
||||||
|
else router.push("/login");
|
||||||
|
} else {
|
||||||
|
if (next_path) router.push(`/onboarding?next_path=${next_path}`);
|
||||||
|
else router.push("/onboarding");
|
||||||
}
|
}
|
||||||
router.push((nextPath ?? "/login").toString());
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleGoogleSignIn = async ({ clientId, credential }: any) => {
|
const handleGoogleSignIn = async ({ clientId, credential }: any) => {
|
||||||
|
@ -129,7 +129,7 @@ const IssueNavbar = observer(() => {
|
|||||||
</div>
|
</div>
|
||||||
) : (
|
) : (
|
||||||
<div className="flex-shrink-0">
|
<div className="flex-shrink-0">
|
||||||
<Link href={`/?next_path=${router.asPath}`}>
|
<Link href={`/login/?next_path=${router.asPath}`}>
|
||||||
<a>
|
<a>
|
||||||
<PrimaryButton className="flex-shrink-0" outline>
|
<PrimaryButton className="flex-shrink-0" outline>
|
||||||
Sign in
|
Sign in
|
||||||
|
@ -7,7 +7,13 @@ import { SignInView, UserLoggedIn } from "components/accounts";
|
|||||||
export const LoginView = observer(() => {
|
export const LoginView = observer(() => {
|
||||||
const { user: userStore } = useMobxStore();
|
const { user: userStore } = useMobxStore();
|
||||||
|
|
||||||
if (!userStore.currentUser) return <SignInView />;
|
return (
|
||||||
|
<>
|
||||||
return <UserLoggedIn />;
|
{userStore?.loader ? (
|
||||||
|
<div className="relative w-screen h-screen flex justify-center items-center">Loading</div>
|
||||||
|
) : (
|
||||||
|
<>{userStore.currentUser ? <UserLoggedIn /> : <SignInView />}</>
|
||||||
|
)}
|
||||||
|
</>
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
@ -3,12 +3,14 @@
|
|||||||
import { useEffect } from "react";
|
import { useEffect } from "react";
|
||||||
// next imports
|
// next imports
|
||||||
import { useRouter } from "next/router";
|
import { useRouter } from "next/router";
|
||||||
|
// js cookie
|
||||||
|
import Cookie from "js-cookie";
|
||||||
// mobx store
|
// mobx store
|
||||||
import { useMobxStore } from "lib/mobx/store-provider";
|
import { useMobxStore } from "lib/mobx/store-provider";
|
||||||
import { RootStore } from "store/root";
|
import { RootStore } from "store/root";
|
||||||
|
|
||||||
const MobxStoreInit = () => {
|
const MobxStoreInit = () => {
|
||||||
const store: RootStore = useMobxStore();
|
const { user: userStore }: RootStore = useMobxStore();
|
||||||
|
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const { states, labels, priorities } = router.query as { states: string[]; labels: string[]; priorities: string[] };
|
const { states, labels, priorities } = router.query as { states: string[]; labels: string[]; priorities: string[] };
|
||||||
@ -19,6 +21,11 @@ const MobxStoreInit = () => {
|
|||||||
// store.issue.userSelectedStates = states || [];
|
// store.issue.userSelectedStates = states || [];
|
||||||
// }, [store.issue]);
|
// }, [store.issue]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const authToken = Cookie.get("accessToken") || null;
|
||||||
|
if (authToken) userStore.fetchCurrentUser();
|
||||||
|
}, [userStore]);
|
||||||
|
|
||||||
return <></>;
|
return <></>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
19
space/pages/index.tsx
Normal file
19
space/pages/index.tsx
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
import { useEffect } from "react";
|
||||||
|
|
||||||
|
// next
|
||||||
|
import { NextPage } from "next";
|
||||||
|
import { useRouter } from "next/router";
|
||||||
|
|
||||||
|
const Index: NextPage = () => {
|
||||||
|
const router = useRouter();
|
||||||
|
const { next_path } = router.query as { next_path: string };
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (next_path) router.push(`/login?next_path=${next_path}`);
|
||||||
|
else router.push(`/login`);
|
||||||
|
}, [router, next_path]);
|
||||||
|
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default Index;
|
@ -5,4 +5,4 @@ import { LoginView } from "components/views";
|
|||||||
|
|
||||||
const LoginPage = () => <LoginView />;
|
const LoginPage = () => <LoginView />;
|
||||||
|
|
||||||
export default LoginPage;
|
export default LoginPage;
|
||||||
|
@ -7,12 +7,17 @@ import { ActorDetail } from "types/issue";
|
|||||||
import { IUser } from "types/user";
|
import { IUser } from "types/user";
|
||||||
|
|
||||||
export interface IUserStore {
|
export interface IUserStore {
|
||||||
|
loader: boolean;
|
||||||
|
error: any | null;
|
||||||
currentUser: any | null;
|
currentUser: any | null;
|
||||||
fetchCurrentUser: () => void;
|
fetchCurrentUser: () => void;
|
||||||
currentActor: () => any;
|
currentActor: () => any;
|
||||||
}
|
}
|
||||||
|
|
||||||
class UserStore implements IUserStore {
|
class UserStore implements IUserStore {
|
||||||
|
loader: boolean = false;
|
||||||
|
error: any | null = null;
|
||||||
|
|
||||||
currentUser: IUser | null = null;
|
currentUser: IUser | null = null;
|
||||||
// root store
|
// root store
|
||||||
rootStore;
|
rootStore;
|
||||||
@ -73,14 +78,19 @@ class UserStore implements IUserStore {
|
|||||||
|
|
||||||
fetchCurrentUser = async () => {
|
fetchCurrentUser = async () => {
|
||||||
try {
|
try {
|
||||||
|
this.loader = true;
|
||||||
|
this.error = null;
|
||||||
const response = await this.userService.currentUser();
|
const response = await this.userService.currentUser();
|
||||||
if (response) {
|
if (response) {
|
||||||
runInAction(() => {
|
runInAction(() => {
|
||||||
|
this.loader = false;
|
||||||
this.currentUser = response;
|
this.currentUser = response;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Failed to fetch current user", error);
|
console.error("Failed to fetch current user", error);
|
||||||
|
this.loader = false;
|
||||||
|
this.error = error;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user