diff --git a/app/client/cypress/integration/Smoke_TestSuite/Auth/Redirects__spec.js b/app/client/cypress/integration/Smoke_TestSuite/Auth/Redirects__spec.js new file mode 100644 index 0000000000..62f9c1290c --- /dev/null +++ b/app/client/cypress/integration/Smoke_TestSuite/Auth/Redirects__spec.js @@ -0,0 +1,8 @@ +describe("Check for redirects associated with auth pages", function() { + it("Should redirect away from auth pages if already logged in", function() { + const loginPageRoute = "/user/login"; + cy.visit(loginPageRoute); + cy.wait(2000); + cy.location("pathname").should("not.equal", loginPageRoute); + }); +}); diff --git a/app/client/cypress/support/commands.js b/app/client/cypress/support/commands.js index 6aa4c12948..82286df1ca 100644 --- a/app/client/cypress/support/commands.js +++ b/app/client/cypress/support/commands.js @@ -287,6 +287,11 @@ Cypress.Commands.add("DeleteApp", (appName) => { }); Cypress.Commands.add("LogintoApp", (uname, pword) => { + cy.window() + .its("store") + .invoke("dispatch", { type: "LOGOUT_USER_INIT" }); + cy.wait("@postLogout"); + cy.visit("/user/login"); cy.get(loginPage.username).should("be.visible"); cy.get(loginPage.username).type(uname); diff --git a/app/client/src/pages/UserAuth/index.tsx b/app/client/src/pages/UserAuth/index.tsx index 2a9aa79df2..40bb5bf268 100644 --- a/app/client/src/pages/UserAuth/index.tsx +++ b/app/client/src/pages/UserAuth/index.tsx @@ -10,6 +10,8 @@ import FooterLinks from "./FooterLinks"; import * as Sentry from "@sentry/react"; const SentryRoute = Sentry.withSentryRouting(Route); +import requiresAuthHOC from "./requiresAuthHOC"; + export const UserAuth = () => { const { path } = useRouteMatch(); const location = useLocation(); @@ -40,4 +42,4 @@ export const UserAuth = () => { ); }; -export default UserAuth; +export default requiresAuthHOC(UserAuth); diff --git a/app/client/src/pages/UserAuth/requiresAuthHOC.tsx b/app/client/src/pages/UserAuth/requiresAuthHOC.tsx new file mode 100644 index 0000000000..24bf10dbe5 --- /dev/null +++ b/app/client/src/pages/UserAuth/requiresAuthHOC.tsx @@ -0,0 +1,22 @@ +import React from "react"; +import { useSelector } from "react-redux"; +import { Redirect } from "react-router-dom"; + +import { getCurrentUser } from "selectors/usersSelectors"; +import { ANONYMOUS_USERNAME } from "constants/userConstants"; +import { APPLICATIONS_URL } from "constants/routes"; + +const requiresAuthHOC = (Component: React.ComponentType) => { + const Wrapped = (props: any) => { + const user = useSelector(getCurrentUser); + + if (user?.email && user?.email !== ANONYMOUS_USERNAME) { + return ; + } + return ; + }; + + return Wrapped; +}; + +export default requiresAuthHOC;