fix: user public authentication workflow updates (#1207)

* auth integration fixes

* auth integration fixes

* auth integration fixes

* auth integration fixes

* dev: update user api to return fallback workspace and improve the structure of the response

* dev: fix the issue keyerror and move onboarding logic to serializer method field

* dev: use-user-auth hook imlemented for route access validation and build issues resolved effected by user payload

* fix: global theme color fix

* style: new onboarding ui , fix: use-user-auth hook implemented

* fix: command palette, project invite modal and issue detail page mutation type fix

* fix: onboarding redirection fix

* dev: build isuue resolved

* fix: use user auth hook fix

* fix: sign in toast alert fix, sign out redirection fix and user theme error fix

* fix: user response fix

* fix: unAuthorizedStatus logic updated

* dev: Implemented SEO in app.tsx

* dev: User public auth workflow updates.

---------

Co-authored-by: sriram veeraghanta <veeraghanta.sriram@gmail.com>
Co-authored-by: pablohashescobar <nikhilschacko@gmail.com>
Co-authored-by: anmolsinghbhatia <anmolsinghbhatia@caravel.tech>
This commit is contained in:
guru_sainath 2023-06-05 17:48:29 +05:30 committed by GitHub
parent 77e05a3599
commit 7eae6b4c9e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 44 additions and 14 deletions

View File

@ -17,7 +17,7 @@ type EmailPasswordFormValues = {
medium?: string; medium?: string;
}; };
export const EmailPasswordForm = ({ onSuccess }: any) => { export const EmailPasswordForm = ({ handleSignIn }: any) => {
const { setToastAlert } = useToast(); const { setToastAlert } = useToast();
const { const {
register, register,
@ -38,7 +38,7 @@ export const EmailPasswordForm = ({ onSuccess }: any) => {
authenticationService authenticationService
.emailLogin(formData) .emailLogin(formData)
.then((response) => { .then((response) => {
onSuccess(response); if (handleSignIn) handleSignIn(response);
}) })
.catch((error) => { .catch((error) => {
console.log(error); console.log(error);

View File

@ -13,6 +13,8 @@ import type { IWorkspace, ICurrentUserResponse } from "types";
const useUserAuth = (routeAuth: "sign-in" | "onboarding" | "admin" | null = "admin") => { const useUserAuth = (routeAuth: "sign-in" | "onboarding" | "admin" | null = "admin") => {
const router = useRouter(); const router = useRouter();
const { next_url } = router.query as { next_url: string };
const [isRouteAccess, setIsRouteAccess] = useState(true); const [isRouteAccess, setIsRouteAccess] = useState(true);
const { const {
@ -48,8 +50,6 @@ const useUserAuth = (routeAuth: "sign-in" | "onboarding" | "admin" | null = "adm
}; };
const handleUserRouteAuthentication = async () => { const handleUserRouteAuthentication = async () => {
console.log("user", user);
if (user && user.is_active) { if (user && user.is_active) {
if (routeAuth === "sign-in") { if (routeAuth === "sign-in") {
if (user.is_onboarded) handleWorkSpaceRedirection(); if (user.is_onboarded) handleWorkSpaceRedirection();
@ -82,8 +82,10 @@ const useUserAuth = (routeAuth: "sign-in" | "onboarding" | "admin" | null = "adm
if (!isLoading) { if (!isLoading) {
setIsRouteAccess(() => true); setIsRouteAccess(() => true);
if (user) handleUserRouteAuthentication(); if (user) {
else { if (next_url) router.push(next_url);
else handleUserRouteAuthentication();
} else {
if (routeAuth === "sign-in") { if (routeAuth === "sign-in") {
setIsRouteAccess(() => false); setIsRouteAccess(() => false);
return; return;
@ -93,7 +95,7 @@ const useUserAuth = (routeAuth: "sign-in" | "onboarding" | "admin" | null = "adm
} }
} }
} }
}, [user, isLoading, routeAuth, router]); }, [user, isLoading, routeAuth, router, next_url]);
return { return {
isLoading: isRouteAccess, isLoading: isRouteAccess,

View File

@ -1,4 +1,7 @@
// next imports
import Head from "next/head";
import dynamic from "next/dynamic"; import dynamic from "next/dynamic";
import Router from "next/router";
// themes // themes
import { ThemeProvider } from "next-themes"; import { ThemeProvider } from "next-themes";
@ -10,9 +13,6 @@ import "styles/command-pallette.css";
import "styles/nprogress.css"; import "styles/nprogress.css";
import "styles/react-datepicker.css"; import "styles/react-datepicker.css";
import Router from "next/router";
import Head from "next/head";
// nprogress // nprogress
import NProgress from "nprogress"; import NProgress from "nprogress";
@ -49,6 +49,21 @@ function MyApp({ Component, pageProps }: AppProps) {
<ToastContextProvider> <ToastContextProvider>
<ThemeContextProvider> <ThemeContextProvider>
<CrispWithNoSSR /> <CrispWithNoSSR />
<Head>
<title>{SITE_TITLE}</title>
<meta property="og:site_name" content={SITE_NAME} />
<meta property="og:title" content={SITE_TITLE} />
<meta property="og:url" content={SITE_URL} />
<meta name="description" content={SITE_DESCRIPTION} />
<meta property="og:description" content={SITE_DESCRIPTION} />
<meta name="keywords" content={SITE_KEYWORDS} />
<meta name="twitter:site" content={`@${TWITTER_USER_NAME}`} />
<link rel="apple-touch-icon" sizes="180x180" href="/favicon/apple-touch-icon.png" />
<link rel="icon" type="image/png" sizes="32x32" href="/favicon/favicon-32x32.png" />
<link rel="icon" type="image/png" sizes="16x16" href="/favicon/favicon-16x16.png" />
<link rel="manifest" href="/site.webmanifest.json" />
<link rel="shortcut icon" href="/favicon/favicon.ico" />
</Head>
<Component {...pageProps} /> <Component {...pageProps} />
</ThemeContextProvider> </ThemeContextProvider>
</ToastContextProvider> </ToastContextProvider>

View File

@ -73,6 +73,21 @@ const HomePage: NextPage = () => {
} }
}; };
const handleEmailPasswordSignIn = async (response: any) => {
try {
if (response) {
mutateUser();
}
} catch (error) {
console.log(error);
setToastAlert({
title: "Error signing in!",
type: "error",
message: "Something went wrong. Please try again later or contact the support team.",
});
}
};
return ( return (
<DefaultLayout> <DefaultLayout>
{isLoading ? ( {isLoading ? (
@ -101,7 +116,7 @@ const HomePage: NextPage = () => {
</> </>
) : ( ) : (
<> <>
<EmailPasswordForm /> <EmailPasswordForm handleSignIn={handleEmailPasswordSignIn} />
</> </>
)} )}
</div> </div>

View File

@ -41,8 +41,6 @@ const Onboarding: NextPage = () => {
const { user } = useUserAuth("onboarding"); const { user } = useUserAuth("onboarding");
console.log("user", user);
return ( return (
<UserAuthorizationLayout> <UserAuthorizationLayout>
<DefaultLayout> <DefaultLayout>

View File

@ -10,7 +10,7 @@ axios.interceptors.response.use(
Cookies.remove("refreshToken", { path: "/" }); Cookies.remove("refreshToken", { path: "/" });
Cookies.remove("accessToken", { path: "/" }); Cookies.remove("accessToken", { path: "/" });
if (window.location.pathname != "/") if (window.location.pathname != "/")
window.location.href = "/?next_url=window.location.pathname"; window.location.href = `/?next_url=${window.location.pathname}`;
} }
return Promise.reject(error); return Promise.reject(error);
} }