【发布时间】:2018-10-21 11:38:57
【问题描述】:
我希望应用程序根据到期令牌自动注销。
Angular 客户端代码:
login(credentials) {
return this.http.post('http://something/api/login/',
credentials)
.map(response => {
let result = response.json();
if (result && result.token) {
localStorage.setItem('token', result.token);
return true;
}
return false;
});
}
由于令牌包含:
"exp": 1526016179 // expiry time
我也许可以在具有<router-outlet></router-outlet> 的 app.component 中执行此操作:
ngOnInit() {
let token = localStorage.getItem('token');
timer:DateTime = new Date(_JwtHelper.decodeToken(token).exp);
if (timer && (Date.now() > timer)) {
logout();
}
}
但是这种方法的问题是它不会自动注销。它需要用户进行某种活动,例如单击按钮以触发 ngOnInit() 或 app.component(我什至不确定它是否会在每次在网站上的任何位置单击按钮时触发,可能不会)。
应用程序应自动在到期时间到达后立即退出并重定向到登录页面。
【问题讨论】:
-
您认为该组件中的间隔是低效的吗?在这里大声思考......
-
使用拦截器服务识别令牌过期,如果令牌过期则重定向到登录页面
-
@SoumyaB.Athani 这仍然需要用户操作
-
@Carsten 我是角度新手。如果有一种方法可以设置某种计时器,该计时器将继续检查是否已达到到期时间戳。我很好。
-
最好的办法是向某处的后端发送请求以保持您的令牌存活。如果 15 分钟内没有调用 keepalive,您可以让后端在下次使用相同令牌尝试时发送错误并让 Angular 注销。
标签: angular typescript jwt angular2-routing angular5