enhancement(login): add redirectBackTo parameter to login button

Signed-off-by: Erik Michelson <github@erik.michelson.eu>
This commit is contained in:
Erik Michelson 2023-09-24 23:37:03 +02:00 committed by Philip Molares
parent 1207ce7690
commit 1199db4692
2 changed files with 21 additions and 7 deletions

View file

@ -1,5 +1,5 @@
/* /*
* SPDX-FileCopyrightText: 2022 The HedgeDoc developers (see AUTHORS file) * SPDX-FileCopyrightText: 2023 The HedgeDoc developers (see AUTHORS file)
* *
* SPDX-License-Identifier: AGPL-3.0-only * SPDX-License-Identifier: AGPL-3.0-only
*/ */
@ -51,7 +51,10 @@ describe('When logged-out ', () => {
type: AuthProviderType.LOCAL type: AuthProviderType.LOCAL
} }
]) ])
cy.getByCypressId('sign-in-button').should('be.visible').parent().should('have.attr', 'href', '/login') cy.getByCypressId('sign-in-button')
.should('be.visible')
.parent()
.should('have.attr', 'href', '/login?redirectBackTo=/history')
}) })
it('sign-in button points to login route: ldap', () => { it('sign-in button points to login route: ldap', () => {
@ -62,7 +65,10 @@ describe('When logged-out ', () => {
providerName: 'cy LDAP' providerName: 'cy LDAP'
} }
]) ])
cy.getByCypressId('sign-in-button').should('be.visible').parent().should('have.attr', 'href', '/login') cy.getByCypressId('sign-in-button')
.should('be.visible')
.parent()
.should('have.attr', 'href', '/login?redirectBackTo=/history')
}) })
}) })
@ -91,7 +97,10 @@ describe('When logged-out ', () => {
type: AuthProviderType.GOOGLE type: AuthProviderType.GOOGLE
} }
]) ])
cy.getByCypressId('sign-in-button').should('be.visible').parent().should('have.attr', 'href', '/login') cy.getByCypressId('sign-in-button')
.should('be.visible')
.parent()
.should('have.attr', 'href', '/login?redirectBackTo=/history')
}) })
}) })
@ -105,7 +114,10 @@ describe('When logged-out ', () => {
type: AuthProviderType.LOCAL type: AuthProviderType.LOCAL
} }
]) ])
cy.getByCypressId('sign-in-button').should('be.visible').parent().should('have.attr', 'href', '/login') cy.getByCypressId('sign-in-button')
.should('be.visible')
.parent()
.should('have.attr', 'href', '/login?redirectBackTo=/history')
}) })
}) })
}) })

View file

@ -14,6 +14,7 @@ import type { ButtonProps } from 'react-bootstrap/Button'
import { Trans } from 'react-i18next' import { Trans } from 'react-i18next'
import { filterOneClickProviders } from '../../login-page/utils/filter-one-click-providers' import { filterOneClickProviders } from '../../login-page/utils/filter-one-click-providers'
import { getOneClickProviderMetadata } from '../../login-page/one-click/get-one-click-provider-metadata' import { getOneClickProviderMetadata } from '../../login-page/one-click/get-one-click-provider-metadata'
import { usePathname } from 'next/navigation'
export type SignInButtonProps = Omit<ButtonProps, 'href'> export type SignInButtonProps = Omit<ButtonProps, 'href'>
@ -26,6 +27,7 @@ export type SignInButtonProps = Omit<ButtonProps, 'href'>
*/ */
export const SignInButton: React.FC<SignInButtonProps> = ({ variant, ...props }) => { export const SignInButton: React.FC<SignInButtonProps> = ({ variant, ...props }) => {
const authProviders = useFrontendConfig().authProviders const authProviders = useFrontendConfig().authProviders
const pathname = usePathname()
const loginLink = useMemo(() => { const loginLink = useMemo(() => {
const oneClickProviders = filterOneClickProviders(authProviders) const oneClickProviders = filterOneClickProviders(authProviders)
@ -33,8 +35,8 @@ export const SignInButton: React.FC<SignInButtonProps> = ({ variant, ...props })
const metadata = getOneClickProviderMetadata(oneClickProviders[0]) const metadata = getOneClickProviderMetadata(oneClickProviders[0])
return metadata.url return metadata.url
} }
return '/login' return `/login?redirectBackTo=${pathname}`
}, [authProviders]) }, [authProviders, pathname])
const buttonTitle = useTranslatedText('login.signIn') const buttonTitle = useTranslatedText('login.signIn')
return ( return (