【问题标题】:Angular 2 : Redirect to a page at application startupAngular 2:在应用程序启动时重定向到页面
【发布时间】:2016-08-10 10:55:23
【问题描述】:

我在 Angular 2 中的 Web 应用程序遇到了一个小问题。

每次应用程序启动,我都会检查用户是否有访问权限。 但是我不知道如何将用户重定向到使这个过程无论他在哪里的路线。

有什么想法吗?

提前致谢!

【问题讨论】:

    标签: angular angular2-routing


    【解决方案1】:

    常用的方法有两种

    • 使用CanActivate
    • 使用自定义RouterOutlet

      检查用户是否通过身份验证,否则重定向到登录路径

    另见
    - Check if the user logged in on any page change in Angular 2
    - http://www.captaincodeman.com/2016/03/31/angular2-route-security/

    【讨论】:

    • 似乎 angular 不能轻松处理重定向。很多努力只是为了强制我的应用程序的第一页...我会尝试这两种方法,谢谢!
    【解决方案2】:

    您可以实现OnInit 接口并在ngOnInit 方法中添加重定向/检查并将@CanActivate 添加到您的子组件:

    class Static{
       static authenticated:boolean = false;
       static initialized:boolean = false;
    }
    
    @CanActivate(()=>{
       if(Static.authenticated && Static.initialized){
          return true;
       }
       return false;
    })
    
    protected ngOnInit():any
    {
        this.loginFacade.refresh().subscribe(event=>
        {
            var url = event.success ? this.location.path() : Routes.LOGIN;
    
            Static.authenticated = event.success;
    
            this.router.recognize(url).then(()=>
            {
                return Promise.resolve(url);
            }, (e)=>
            {
                return Promise.resolve(Routes.LOGIN);
            }).then((url)=>
            {
                Static.initialized = true;
                return this.router.navigateByUrl(url);
            });
        });
    }
    

    同时删除默认路由。

    【讨论】:

    • OnInit 被调用,但我不能在我的主类中使用路由器......我有错误“无法读取未定义的属性'构造函数'”。感谢您的回答
    • 我在 Bootstrap 调用的班级 App 中尝试了您的解决方案。看来我们无法在此类中进行重定向
    猜你喜欢
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    • 2016-04-28
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    相关资源
    最近更新 更多