我想在令牌过期时在身份验证页面中显示一条消息。 该应用程序具有一个保护程序,可检查每个请求中用户是否仍通过身份验证(令牌仍然有效)。 我的问题是当我使用localstorage和会话存储来存储变量“ expired”时。 expired始终为true,因为它存储在导航器中。还有其他解决方案吗? 我刚接触过角形,所以请帮忙吗?
如果过期,我想在登录页面上显示什么:
<span *ngIf="expired" class="help-block text-danger">
Votre session a expiré !
</span>
这是保护代码:
@Injectable()
export class AuthGuard implements CanActivateChild {
constructor(private router: Router, private localSt:
LocalStorageService, private loginService: LoginService) {
}
canActivateChild(childRoute: ActivatedRouteSnapshot, state:
RouterStateSnapshot) {
if (this.loginService.isAuthenticated()) {
sessionStorage.setItem("expired", 'false');
return true;
}
sessionStorage.setItem("expired", 'true');
this.router.navigate(['/login']);
return false;
}
}
答案 0 :(得分:0)
我要显示“会话已过期”的方法是:
如果用户闲置,或者导航到没有适当权限的URL,我会通过共享服务上的功能将他/她发送到登录页面
endSesion( message ) {
window.localStorage.clear(); //to clear all session variables, tokens and stuff
window.localStorage.setItem('message',message) // save as the only left thing in LS
this.router.navigate(['login']);
}
在登录组件的constructor
或ngOnInit
中
ngOnInit() {
this.message = window.localStorage.getItem('message'); // get the message from LS
if ( this.message ) {
alert('Dude!: ' + this.message ); //maybe sweetalert will be nicer to look at
}
}
这样,您就不会因为会话已过期而仅将用户扔掉,但如果没有权限,或者即使您从后端响应中检查了另一个安全问题,也可能会导致这种情况。