diff --git a/client/src/app/core/auth/auth.service.ts b/client/src/app/core/auth/auth.service.ts index 443772c9e..5f5730e02 100644 --- a/client/src/app/core/auth/auth.service.ts +++ b/client/src/app/core/auth/auth.service.ts @@ -14,7 +14,7 @@ import { AuthUser } from './auth-user.model' import { objectToUrlEncoded } from '@app/shared/misc/utils' import { peertubeLocalStorage } from '@app/shared/misc/peertube-local-storage' import { I18n } from '@ngx-translate/i18n-polyfill' -import { HotkeysService, Hotkey } from 'angular2-hotkeys' +import { Hotkey, HotkeysService } from 'angular2-hotkeys' interface UserLoginWithUsername extends UserLogin { access_token: string @@ -38,7 +38,6 @@ export class AuthService { loginChangedSource: Observable userInformationLoaded = new ReplaySubject(1) hotkeys: Hotkey[] - redirectUrl: string private clientId: string = peertubeLocalStorage.getItem(AuthService.LOCAL_STORAGE_OAUTH_CLIENT_KEYS.CLIENT_ID) private clientSecret: string = peertubeLocalStorage.getItem(AuthService.LOCAL_STORAGE_OAUTH_CLIENT_KEYS.CLIENT_SECRET) @@ -178,8 +177,6 @@ export class AuthService { this.setStatus(AuthStatus.LoggedOut) this.hotkeysService.remove(this.hotkeys) - - this.redirectUrl = null } refreshAccessToken () { diff --git a/client/src/app/core/routing/login-guard.service.ts b/client/src/app/core/routing/login-guard.service.ts index 40ff8f505..18bc41ca6 100644 --- a/client/src/app/core/routing/login-guard.service.ts +++ b/client/src/app/core/routing/login-guard.service.ts @@ -20,8 +20,6 @@ export class LoginGuard implements CanActivate, CanActivateChild { canActivate (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { if (this.auth.isLoggedIn() === true) return true - this.auth.redirectUrl = state.url - this.router.navigate([ '/login' ]) return false } diff --git a/client/src/app/core/routing/redirect.service.ts b/client/src/app/core/routing/redirect.service.ts index 1881be117..e1db4097b 100644 --- a/client/src/app/core/routing/redirect.service.ts +++ b/client/src/app/core/routing/redirect.service.ts @@ -1,5 +1,5 @@ import { Injectable } from '@angular/core' -import { Router } from '@angular/router' +import { NavigationEnd, Router } from '@angular/router' import { ServerService } from '../server' @Injectable() @@ -8,6 +8,9 @@ export class RedirectService { static INIT_DEFAULT_ROUTE = '/videos/trending' static DEFAULT_ROUTE = RedirectService.INIT_DEFAULT_ROUTE + private previousUrl: string + private currentUrl: string + constructor ( private router: Router, private serverService: ServerService @@ -18,6 +21,7 @@ export class RedirectService { RedirectService.DEFAULT_ROUTE = config.instance.defaultClientRoute } + // Load default route this.serverService.configLoaded .subscribe(() => { const defaultRouteConfig = this.serverService.getConfig().instance.defaultClientRoute @@ -26,6 +30,21 @@ export class RedirectService { RedirectService.DEFAULT_ROUTE = defaultRouteConfig } }) + + // Track previous url + this.currentUrl = this.router.url + router.events.subscribe(event => { + if (event instanceof NavigationEnd) { + this.previousUrl = this.currentUrl + this.currentUrl = event.url + } + }) + } + + redirectToPreviousRoute () { + if (this.previousUrl) return this.router.navigateByUrl(this.previousUrl) + + return this.redirectToHomepage() } redirectToHomepage (skipLocationChange = false) { diff --git a/client/src/app/login/login.component.ts b/client/src/app/login/login.component.ts index 212a8ff1f..18f8f69e5 100644 --- a/client/src/app/login/login.component.ts +++ b/client/src/app/login/login.component.ts @@ -64,7 +64,7 @@ export class LoginComponent extends FormReactive implements OnInit { this.authService.login(username, password) .subscribe( - () => this.redirect(), + () => this.redirectService.redirectToPreviousRoute(), err => { if (err.message.indexOf('credentials are invalid') !== -1) this.error = this.i18n('Incorrect username or password.') @@ -74,15 +74,6 @@ export class LoginComponent extends FormReactive implements OnInit { ) } - redirect () { - const redirect = this.authService.redirectUrl - if (redirect) { - this.router.navigate([ redirect ]) - } else { - this.redirectService.redirectToHomepage() - } - } - askResetPassword () { this.userService.askResetPassword(this.forgotPasswordEmail) .subscribe( diff --git a/client/src/app/shared/user-subscription/subscribe-button.component.ts b/client/src/app/shared/user-subscription/subscribe-button.component.ts index 315ea5037..9c8a15023 100644 --- a/client/src/app/shared/user-subscription/subscribe-button.component.ts +++ b/client/src/app/shared/user-subscription/subscribe-button.component.ts @@ -50,11 +50,10 @@ export class SubscribeButtonComponent implements OnInit { subscribe () { if (this.isUserLoggedIn()) { - this.localSubscribe() - } else { - this.authService.redirectUrl = this.router.url - this.gotoLogin() + return this.localSubscribe() } + + return this.gotoLogin() } localSubscribe () { diff --git a/client/src/app/videos/+video-watch/comment/video-comment-add.component.ts b/client/src/app/videos/+video-watch/comment/video-comment-add.component.ts index 6db0eb55d..7f582c950 100644 --- a/client/src/app/videos/+video-watch/comment/video-comment-add.component.ts +++ b/client/src/app/videos/+video-watch/comment/video-comment-add.component.ts @@ -135,7 +135,6 @@ export class VideoCommentAddComponent extends FormReactive implements OnInit { gotoLogin () { this.hideVisitorModal() - this.authService.redirectUrl = this.router.url this.router.navigate([ '/login' ]) }