diff --git a/frontend/src/metabase/admin/settings/containers/RedirectToAllowedSettings.jsx b/frontend/src/metabase/admin/settings/containers/RedirectToAllowedSettings.jsx index 22daceec3d0dc5c0485a1fe6f81fe3fcb4fe864f..a5d836cc909663861d382e39cd1cd4ee3d0190a7 100644 --- a/frontend/src/metabase/admin/settings/containers/RedirectToAllowedSettings.jsx +++ b/frontend/src/metabase/admin/settings/containers/RedirectToAllowedSettings.jsx @@ -1,5 +1,5 @@ import { connect } from "react-redux"; -import { push } from "react-router-redux"; +import { push, replace } from "react-router-redux"; import { getUser } from "metabase/selectors/user"; import { getAllowedMenuItems } from "metabase/nav/utils"; @@ -10,15 +10,16 @@ const mapStateToProps = (state, props) => ({ const mapDispatchToProps = { push, + replace, }; -const RedirectToAllowedSettings = ({ user, push }) => { +const RedirectToAllowedSettings = ({ user, replace }) => { const allowedNavItems = getAllowedMenuItems(user); if (allowedNavItems.length === 0) { - push("/unauthorized"); + replace("/unauthorized"); } else { - push(allowedNavItems[0].path); + replace(allowedNavItems[0].path); } return null; diff --git a/frontend/src/metabase/admin/utils.js b/frontend/src/metabase/admin/utils.js index 21e7a3fb0fabaf0e7683417befd11a72096140bc..91435ae2f753ca9d7c6877d640331f10e090e9ba 100644 --- a/frontend/src/metabase/admin/utils.js +++ b/frontend/src/metabase/admin/utils.js @@ -1,6 +1,6 @@ import { connect } from "react-redux"; import { UserAuthWrapper } from "redux-auth-wrapper"; -import { routerActions, push } from "react-router-redux"; +import { routerActions, replace } from "react-router-redux"; import { canAccessPath } from "metabase/nav/utils"; import { getUser } from "metabase/selectors/user"; @@ -22,18 +22,18 @@ const mapStateToProps = state => ({ }); const mapDispatchToProps = { - push, + replace, }; export const createAdminRedirect = (adminPath, nonAdminPath) => { const NonAdminRedirectComponent = connect( mapStateToProps, mapDispatchToProps, - )(({ user, push, location }) => { + )(({ user, replace, location }) => { const path = `${location.pathname}/${ user.is_superuser ? adminPath : nonAdminPath }`; - push(path); + replace(path); return null; }); diff --git a/frontend/test/metabase/scenarios/admin/settings/reproductions/21532-back-button.cy.spec.js b/frontend/test/metabase/scenarios/admin/settings/reproductions/21532-back-button.cy.spec.js new file mode 100644 index 0000000000000000000000000000000000000000..b608ee9d087e6db6d13c88ab7cf225b0c0f1c807 --- /dev/null +++ b/frontend/test/metabase/scenarios/admin/settings/reproductions/21532-back-button.cy.spec.js @@ -0,0 +1,21 @@ +import { restore } from "__support__/e2e/cypress"; + +describe("issue 21532", () => { + beforeEach(() => { + restore(); + cy.signInAsAdmin(); + }); + + it("should allow navigating back from admin settings (metabase#21532)", () => { + cy.visit("/"); + + cy.icon("gear").click(); + cy.findByText("Admin settings").click(); + cy.findByText("Getting set up"); + + cy.go("back"); + cy.location().should(location => { + expect(location.pathname).to.eq("/"); + }); + }); +});