Angular2会缓慢但确实会进展。现在,我面临以下挑战。我想检查用户是否在每个页面上都进行了更改(换句话说,在每个组件的负载下)。当然,我可以在每个接口中实现OnInit接口,但这就是代码味道。
有什么有效的方法可以执行应用程序每个页面上所需的任何内容?我很想听听有关如何处理此任务的最佳做法的其他建议。
我正在使用该库(https://auth0.com/blog/2015/11/10/introducing-angular2-jwt-a-library-for-angular2-authentication/)进行基于jwt的登录,并且我已经有了不错的服务封装所有与身份验证相关的功能的类。因此,已经完成并测试了用户是否登录的实际检查。
谢谢,
如果您使用路由(由于您说:“每次页面更改”,情况似乎都是这样),则可以利用以下几项:
创建一个自定义路由器插座(的子类RouterOutlet
),以检查其activate
方法的身份验证。在这种情况下,您可以拥有全局的东西。像这样:
@Directive({
selector: 'auth-outlet'
})
export class AuthOutlet extends RouterOutlet {
(...)
activate(oldInstruction: ComponentInstruction) {
var url = this.parentRouter.lastNavigationAttempt;
if (isAuthenticated()) {
return super.activate(oldInstruction);
} else {
(...)
}
}
}
有关更多详细信息,请参见此问题:
利用CanActivate
装饰器检查组件是否可以激活。您可以在此级别执行身份验证检查。
还可以在RouterLink级别执行某些操作以显示/隐藏路由链接。在这种情况下,您可以根据相关的路由配置和当前用户提示在这些链接上应用角色。有关更多详细信息,请参见此问题:
这也可以在HTTP拦截器(扩展该类的类Http
)中进行处理。在这种情况下,执行请求时,您可以插入一些身份验证检查:
@Injectable()
export class CustomHttp extends Http {
constructor(backend: ConnectionBackend, defaultOptions: RequestOptions) {
super(backend, defaultOptions);
}
request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> {
console.log('request...');
if (isAuthenticated()) {
return super.request(url, options).catch(res => {
// do something
});
} else {
// Redirect to login page
// Or throw an exception: return Observable.throw(new Error(...));
}
}
(...)
}
有关更多详细信息,请参见此问题:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句