Add URL redirection support for external auth
This commit is contained in:
parent
f82ea670d8
commit
cb28bb92da
|
@ -1,7 +1,7 @@
|
|||
|
||||
import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'
|
||||
import { ActivatedRoute } from '@angular/router'
|
||||
import { AuthService, Notifier, RedirectService, UserService } from '@app/core'
|
||||
import { AuthService, Notifier, RedirectService, SessionStorageService, UserService } from '@app/core'
|
||||
import { HooksService } from '@app/core/plugins/hooks.service'
|
||||
import { LOGIN_PASSWORD_VALIDATOR, LOGIN_USERNAME_VALIDATOR } from '@app/shared/form-validators/login-validators'
|
||||
import { FormReactive, FormValidatorService } from '@app/shared/shared-forms'
|
||||
|
@ -17,6 +17,8 @@ import { RegisteredExternalAuthConfig, ServerConfig } from '@shared/models'
|
|||
})
|
||||
|
||||
export class LoginComponent extends FormReactive implements OnInit, AfterViewInit {
|
||||
private static SESSION_STORAGE_REDIRECT_URL_KEY = 'login-previous-url'
|
||||
|
||||
@ViewChild('forgotPasswordModal', { static: true }) forgotPasswordModal: ElementRef
|
||||
|
||||
accordion: NgbAccordion
|
||||
|
@ -46,7 +48,8 @@ export class LoginComponent extends FormReactive implements OnInit, AfterViewIni
|
|||
private userService: UserService,
|
||||
private redirectService: RedirectService,
|
||||
private notifier: Notifier,
|
||||
private hooks: HooksService
|
||||
private hooks: HooksService,
|
||||
private storage: SessionStorageService
|
||||
) {
|
||||
super()
|
||||
}
|
||||
|
@ -88,6 +91,8 @@ export class LoginComponent extends FormReactive implements OnInit, AfterViewIni
|
|||
this.externalAuthError = true
|
||||
return
|
||||
}
|
||||
|
||||
this.storage.setItem(LoginComponent.SESSION_STORAGE_REDIRECT_URL_KEY, this.redirectService.getPreviousUrl())
|
||||
}
|
||||
|
||||
ngAfterViewInit () {
|
||||
|
@ -151,7 +156,9 @@ The link will expire within 1 hour.`
|
|||
|
||||
this.authService.login(username, null, token)
|
||||
.subscribe({
|
||||
next: () => this.redirectService.redirectToPreviousRoute(),
|
||||
next: () => {
|
||||
this.redirectService.redirectToPreviousRoute(this.storage.getItem(LoginComponent.SESSION_STORAGE_REDIRECT_URL_KEY))
|
||||
},
|
||||
|
||||
error: err => {
|
||||
this.handleError(err)
|
||||
|
|
|
@ -96,7 +96,7 @@ export class VideoChannelUpdateComponent extends VideoChannelEdit implements OnI
|
|||
|
||||
this.notifier.success($localize`Video channel ${videoChannelUpdate.displayName} updated.`)
|
||||
|
||||
this.redirectService.redirectToPreviousRoute([ '/c', this.videoChannel.name ])
|
||||
this.redirectService.redirectToPreviousRoute('/c/' + this.videoChannel.name)
|
||||
},
|
||||
|
||||
error: err => {
|
||||
|
|
|
@ -46,19 +46,23 @@ export class RedirectService {
|
|||
return this.defaultTrendingAlgorithm
|
||||
}
|
||||
|
||||
redirectToPreviousRoute (fallbackRoute: string[] = null) {
|
||||
getPreviousUrl () {
|
||||
return this.previousUrl
|
||||
}
|
||||
|
||||
redirectToPreviousRoute (fallbackRoute?: string) {
|
||||
const exceptions = [
|
||||
'/verify-account',
|
||||
'/reset-password'
|
||||
]
|
||||
|
||||
if (this.previousUrl) {
|
||||
if (this.previousUrl && this.previousUrl !== '/') {
|
||||
const isException = exceptions.find(e => this.previousUrl.startsWith(e))
|
||||
if (!isException) return this.router.navigateByUrl(this.previousUrl)
|
||||
}
|
||||
|
||||
if (fallbackRoute) {
|
||||
return this.router.navigate(fallbackRoute)
|
||||
return this.router.navigateByUrl(fallbackRoute)
|
||||
}
|
||||
|
||||
return this.redirectToHomepage()
|
||||
|
|
Loading…
Reference in New Issue