我刚刚完成了使用存储在localStorage中的服务和令牌来实现对我的angular路由的保护。
但是,我已经构建了一个工作正常的nodejs中间件,用于检查相同的令牌。我还希望将其与角度路由保护一起使用,以防角度路由保护被某种方式破坏或另一个应用程序命中了相同的受nodejs保护的路由。 (毕竟,即使我遵循的节点/角度tutorial也实现了节点路由保护,即使他使用护照并且我自己编写了特定于路由的中间件也是如此)
我目前的愚蠢解决方案是
在中间件中
exports.required = ()=>{
return (req, res,next)=>{
const token = req.get('Authorization');
const key = config.key;
jwt.verify(token, key,function(err, decoded) {
if (err){return res.json({redirect:true});}
if (decoded){
let dateNow = Math.floor(Date.now() / 1000);
if (dateNow > decoded.exp){return res.json({redirect:true});}
next();
}
else {return res.json({redirect:true});}
});
}
}
以及我的角度分量
if(data.redirect){return this.router.navigate(['/cms/login']);}
那太糟糕了,因为它确实很慢,而且在重定向之前我可以看到受保护路由的闪烁。
如何将redirect
json体现在我的角度路由保护服务中,这样我才能有一个整洁,快速的解决方案?
谢谢
PS,我的角度路线保护服务是
import { Injectable } from '@angular/core';
import { Router, CanActivate } from '@angular/router';
import { AuthService } from './auth.service';
@Injectable()
export class AuthGuard implements CanActivate {
constructor (private authService:AuthService, private router:Router){
}
canActivate() {
if(this.authService.tokenExpired()) {
this.router.navigate(['/cms/login']);
return false;
} else {
return true;
}
}
}