gpt4 book ai didi

Angular 2 : AuthGuard not working when using browser navigation buttons

转载 作者:行者123 更新时间:2023-12-05 04:10:48 24 4
gpt4 key购买 nike

我已经配置了一个简单的 AuthGuard,当“正常”通过应用程序导航时它工作得很好(见下面的代码)。

现在想象一下:

用户导航到 /content/secured-content,这需要身份验证 => 由于 checkLogin,他被重定向到 /authentication/login > => 他成功通过身份验证,因此被重定向回 /content/secured-content => 他单击“注销”按钮并成功注销(checkLogin 将现在返回 false)。

现在是重要的事情:当用户现在导航回安全内容页面(浏览器的“后退”按钮)时,canActivatecanActivateChild canLoad 被调用,路由器愉快地显示安全内容。 protected 内容本身依赖于在注销时被销毁的 session ,因此它仍然是安全的,但我希望用户再次被重定向到 /authentication/login 页面并期望该行为是诚实的。

你能告诉我我的推理错误在哪里吗?我的问题是否有合适的解决方案?

附件

路由配置片段:

{
path: 'secured-content',
component: SecureComponent,
canLoad: [ AuthGuard ]
}

auth-guard.service.ts:

import { Injectable } from '@angular/core'
import { CanActivate, CanActivateChild, CanLoad,
Router, ActivatedRouteSnapshot, RouterStateSnapshot, Route
} from '@angular/router'

import { AuthenticationService } from 'app/authentication/authentication.service'

@Injectable()
export class AuthGuard implements CanActivate, CanActivateChild, CanLoad {
constructor(
private authService: AuthenticationService,
private router: Router
) {}

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
if (this.checkLogin(state.url)) {
return true
}
return false
}

canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
return this.canActivate(route, state)
}

canLoad(route: Route): boolean {
const url = `/${route.path}`

return this.checkLogin(url)
}

private checkLogin(url: string): boolean {
if (this.authService.isAuthenticated()) {
return true
}

this.authService.redirectUrl = url

this.router.navigate([ '/authentication/login' ])
return false
}
}

ng --version:

@angular/cli: 1.0.1
node: 6.10.3
os: win32 x64
@angular/common: 4.1.2
@angular/compiler: 4.1.2
@angular/core: 4.1.2
@angular/forms: 4.1.2
@angular/http: 4.1.2
@angular/platform-browser: 4.1.2
@angular/platform-browser-dynamic: 4.1.2
@angular/router: 4.1.2
@angular/cli: 1.0.1
@angular/compiler-cli: 4.1.2

最佳答案

需要在路由配置中使用canActivate:[AuthGuard]

可以激活:

Indicates that a class can implement to be a guard deciding if a route can be activated.

可以加载:

Interface that a class can implement to be a guard deciding if a children can be loaded.

关于 Angular 2 : AuthGuard not working when using browser navigation buttons,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43933595/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com